docker - 在单个存储库中发布 hub.docker.com 上的多个图像
问题描述
我是 Docker 新手,这让我很头疼。我完成了在 Magento 中使用 docker-compose.yml 链接多个图像的站点的开发。
这是我的 docker-compose.yml
version: '3'
services:
web:
image: webdevops/php-apache-dev:7.1
container_name: web
restart: always
user: application
environment:
- WEB_ALIAS_DOMAIN=local.domain.com
- WEB_DOCUMENT_ROOT=/app/pub
- PHP_DATE_TIMEZONE=EST
- PHP_DISPLAY_ERRORS=1
- PHP_MEMORY_LIMIT=2048M
- PHP_MAX_EXECUTION_TIME=300
- PHP_POST_MAX_SIZE=500M
- PHP_UPLOAD_MAX_FILESIZE=1024M
volumes:
- "./:/app:cached"
ports:
- "80:80"
- "443:443"
- "32823:22"
links:
- mysql
mysql:
image: mariadb:10
container_name: mysql
restart: always
ports:
- "52000:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=magento
volumes:
- db-data:/var/lib/mysql
phpmyadmin:
container_name: phpmyadmin
restart: always
image: phpmyadmin/phpmyadmin:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- PMA_USER=root
- PMA_PASSWORD=root
ports:
- "8080:80"
links:
- mysql:db
depends_on:
- mysql
volumes:
db-data:
external: false
然后docker-compose up -d --build
。我在本地机器上运行了 3 个图像和 3 个容器。
我想在 hub.docker.com 上发布这些图像,以便任何人都可以下载图像并让所有容器运行。
还有一种方法可以将 MySQL DB 添加到图像中,这样任何人都可以拥有与我在本地运行的网站相同的运行网站吗?
解决方案
请记住,您可以在 Docker Hub 上发布的唯一内容是 Docker 映像;您不能发布容器、卷、Docker Compose YAML 文件或其他工件。由于 YAML 文件是一个相当简单的文本文件,因此很常见的是在 GitHub 上发布它,并附上一个解释如何使用它的 README 文件。
你不需要推送phpmyadmin/phpmyadmin
ormariadb
镜像,因为它们是标准的 Docker Hub 镜像,所以你只需要推送你的自定义镜像。我强烈建议删除将volumes:
您的本地开发树安装在图像内容上的那个,以验证图像是否确实具有您的期望。
有没有办法将mysql DB添加到图像中
不可以。各种标准 Docker 数据库映像的构建方式使得构建包含预填充数据的映像极其困难。 带有 mysql 数据的 Wordpress 图像对该主题进行了一些很好的讨论,并且MySQL Docker 容器没有将数据保存到新图像中对问题进行了一些很好的分析。
推荐阅读
- drupal - 如何在我的云实例上访问 DKAN 站点
- python - 理解 Tensorflow 和 keras 以及参数 maxpooling
- laravel - Laravel - 计算过去 30 天的收入增加或减少百分比
- gitlab - .gitlab-ci.yml 无法解析 cdcd 变量
- python-3.x - 如何从 Pandas 记录的前 N 行中获取最大值?
- node.js - 为什么我在使用 Babel 进行编译后会出现 TypeError?
- json - AWS ConfigService - 如何附加账户 ID
- php - 在将值从一个函数传递到另一个函数时,视图文件未在 codeigniter 4 中加载?
- javascript - 相同的词正在消失
- c++ - 我的 C++ 变量是在堆栈还是堆上?