首页 > 解决方案 > 在单个存储库中发布 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 添加到图像中,这样任何人都可以拥有与我在本地运行的网站相同的运行网站吗?

标签: dockerdocker-composedockerhub

解决方案


请记住,您可以在 Docker Hub 上发布的唯一内容是 Docker 映像;您不能发布容器、卷、Docker Compose YAML 文件或其他工件。由于 YAML 文件是一个相当简单的文本文件,因此很常见的是在 GitHub 上发布它,并附上一个解释如何使用它的 README 文件。

你不需要推送phpmyadmin/phpmyadminormariadb镜像,因为它们是标准的 Docker Hub 镜像,所以你只需要推送你的自定义镜像。我强烈建议删除将volumes:您的本地开发树安装在图像内容上的那个,以验证图像是否确实具有您的期望。

有没有办法将mysql DB添加到图像中

不可以。各种标准 Docker 数据库映像的构建方式使得构建包含预填充数据的映像极其困难。 带有 mysql 数据的 Wordpress 图像对该主题进行了一些很好的讨论,并且MySQL Docker 容器没有将数据保存到新图像中对问题进行了一些很好的分析。


推荐阅读