【问题标题】:How to push multiple docker images with docker-compose to docker hub?如何使用 docker-compose 将多个 docker 镜像推送到 docker hub?
【发布时间】:2021-05-09 11:45:10
【问题描述】:

我的 docker-compose 文件中有几个图像和服务,用于创建 PHP、Apache、MySql 和 PHPMyAdmin 环境来运行我的网站。谁能帮助我如何推送我的所有图像或在 Docker Hub 上使用我的网站代码创建环境?

Dockerfile

FROM php:7.4-apache
RUN docker-php-ext-install mysqli

docker-compose.yml

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html/

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  phpmyadmin:
      image: phpmyadmin
      restart: always
      ports:
        - 8080:80
      environment:
         - PMA_ARBITRARY=1

index.php 和我所有的网站代码都在 src 文件夹中

【问题讨论】:

    标签: docker docker-compose docker-registry docker-push


    【解决方案1】:

    了解可以推送到 Docker Hub 的内容和不可以推送到 Docker Hub 的内容非常有用。 Docker Hub 将包含 Docker 映像,但它不能托管数据内容、docker-compose.yml 文件本身或任何其他不是 Docker 映像的内容。您使用的两个支持容器都使用标准 Docker Hub 映像。所以你需要让你的 php 容器自包含,将它推送到 Docker Hub,然后手动将 docker-compose.yml 文件复制到你将运行它的地方。

    删除对本地系统的依赖。 除了复制 Docker 容器外,您通常不希望复制应用程序源代码。在docker-compose.yml 文件中,删除将本地系统源代码挂载到容器中的volumes:,但将其替换为将其复制到映像中的 Dockerfile 行:

    COPY ./src/ /var/www/html/
    

    这不会是一个实时开发环境,没关系。

    为您的 Docker Hub 映像命名。您可以在 docker-compose.yml 文件中同时包含 build: 和 image: 行。如果你这样做,它指定了构建图像的名称(而不是让 Compose 选择它)。这应该会给你留下:

    services:
      php:
        build: .  # with default Dockerfile
        image: myname/myapp
        ports:
          - '80:80'
        # no volumes:
      db: # as above
      phpmyadmin: # as above
    

    构建和测试。您应该能够进行此设置; docker-compose down -v 清理所有本地工件; docker-compose build 图像,docker-compose up 开始这一切。执行您需要的任何手动测试,以及您构建的任何自动化端到端测试。

    推送图片。

    docker-compose push php
    

    在其他地方运行它。您需要docker-compose.yml 文件,但不需要任何其他工件。当你在另一台机器上运行docker-compose up 时,它会拉取它在本地没有的任何图像。 (如果是私人图片,可能需要先docker login那里。)

    scp docker-compose.yml there:
    ssh root@there docker-compose up -d
    

    数据库内容。您的docker-compose.yml 文件没有声明volumes: 来存储数据库数据;这可能会导致重新启动时数据丢失。但是,您也不能将这些卷推送到 Docker Hub。您可以在本地系统上备份您的数据库并在远程系统上恢复它;或者,您可以在应用程序启动过程中运行数据库迁移和播种脚本。数据需要与代码(图像)和部署机制(Compose)分开处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2023-04-10
      • 2021-11-22
      • 2021-09-30
      相关资源
      最近更新 更多