繁体   English   中英

如何将带有 docker-compose 的多个 docker 图像推送到 docker 集线器?

[英]How to push multiple docker images with docker-compose to docker hub?

I have several images and services in my docker-compose file, For creating a PHP, Apache, MySql, and PHPMyAdmin environment to run my website. 谁能帮助我如何在 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 Hub will contain Docker images, but it can't host data content, the docker-compose.yml file itself, or anything else that's not a Docker image. 您使用的两个支持容器都使用标准 Docker Hub 映像。 因此,您需要使您的php容器自包含,将其推送到 Docker 集线器,然后手动将docker-compose.yml文件复制到您将运行它的地方。

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

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

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

命名您的 Docker 集线器图像。 您可以在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 集线器。 您可以在本地系统上备份您的数据库并在远程系统上恢复它; 或者,您可以在应用程序启动过程中运行数据库迁移和播种脚本。 数据需要与代码(图像)和部署机制(Compose)分开处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM