使用 docker-compose 构建 docker 镜像并推送到镜像/容器注册表?

迈克尔·J·罗伯茨

我有以下 docker-compose.yml 文件:

docker-compose.staging.yml

version: '3.7'

services:
  web:
    restart: always
    build: ./django
    expose:
      - "8000"
    volumes:
      - django-static:/usr/src/app/static
      - django-uploads:/usr/src/app/uploads
    environment:
      DJANGO_POSTGRES_REMOTE: 'True'
      DJANGO_POSTGRES_HOST: myservername.postgres.database.azure.com
      DJANGO_POSTGRES_PORT: '1234'
      DJANGO_POSTGRES_NAME: dbname
      DJANGO_POSTGRES_USER: dbuser
      DJANGO_POSTGRES_PASS: dbpassword
      DJANGO_SECRET_KEY: 
      DJANGO_DEBUG: 1
      DJANGO_TESTING: 0
      DJANGO_WAVE_API_VERSION: '1'
      DJANGO_WAVE_SUPERUSER_USERNAME: ''
      DJANGO_WAVE_SUPERUSER_PASSWORD: ''
      DJANGO_WAVE_SUPERUSER_EMAIL: ''
      DJANGO_BUGSNAG_LOGGING_ENABLED: 0
      DJANGO_BUGSNAG_API_KEY: ''
      DJANGO_ROOT_DOMAIN: ''
      DJANGO_MEMCACHED_ON: 'False'
      VUE_ROOT_DOMAIN: ''

    command: /usr/src/app/wave.sh

  nginx:
    build:
      context: nginx
      dockerfile: Dockerfile
    restart: on-failure
    ports:
      - 80:80
      - 443:443
    volumes:
      - ssl_data:/etc/resty-auto-ssl
    environment:
      ALLOWED_DOMAINS: "${STAGING_ALLOWED_DOMAINS}"
      SITES: "${STAGING_SITES}"

volumes:
  ssl_data:
  django-static:
  django-uploads:

我已经用代码测试了这个 docker-compose 文件构建过程,并且所有部署都很好:

docker-compose -f docker-compose.staging.yml up --build

我的问题是,我通常使用 docker-machine 自动部署,它会部署一个新的虚拟机。

但是,我想知道,使用 docker-compose 将其作为图像发布到 docker hub 之类的 docker 注册表的过程是什么?我试图寻找答案,但似乎找不到任何东西?

问:我是否从这两个服务构建两个映像?

任何有关如何将两个或多个服务从 docker-compose.yml 文件推送到 Docker 集线器(或类似文件)的帮助将不胜感激!

大卫迷宫

您展示的 Docker Compose YAML 文件从两个单独的 Dockerfile 构建两个单独的映像,然后从每个运行一个容器。您可以使用docker pushdocker-compose push将单个映像推送到 Docker Hub,但无法将它们组合成单个映像或将整个部署设置作为一个单元推送。

当你去运行这两个图像时你会得到的设置将需要一个非常相似的docker-compose.yml文件,但用image:行而不是build:

version: '3.7'
services:
  web:
    restart: always
    image: myname/web:20191129
    volumes: [ ... ]
    environment: { ... }
  nginx:
    image: myname/nginx:20191129
    restart: on-failure
    ports: ['80:80', '443:443']
    volumes: [ ... ]
    environment: { ... }
volumes: { ... }

(中volumes:ports:environment:是一样的原始文件;expose:command:。或许应该被内置到图像,并不需要重复)

将此文件签入源代码管理。您可以根据需要将其分发到目标系统:手动分发scp,或使用 Ansible 或 Chef 等自动化工具将其放在那里并启动它。

要获得推到码头工人集线器(或其他注册),你需要用多克撰写文件中的图像 build:image:如果您同时指定两者,那么当您查看docker-compose build图像时,它们将被标记为您指定的名称。然后,您可以使用docker-compose push两个图像(使用一个命令,但仍为两个单独的图像)。

在这种环境中,您可能还会发现拥有多个重叠docker-compose.yml文件很有帮助使基本docker-compose.yml文件只有image:声明,并添加一个单独的docker-compose.build.yml

version: '3'
services:
  web:
    build: ./django
    # and no other options
  nginx:
    build: ./nginx

然后,当您想构建映像以进行部署前测试或推送它时,您可以

docker-compose -f docker-compose.yml -f docker-compose.build.yml build

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用私有端点将 docker 镜像推送到容器注册表

无法使用docker-compose文件将docker映像推送到Azure注册表容器

Docker使用Spring和mysql镜像撰写推送到注册表

如何使用rabbitmq docker compose yml文件构建Docker镜像?

未使用Docker注册表镜像

使用 docker-compose 在服务器上构建多容器 docker 镜像

使用fabric8 java客户端将docker镜像推送到远程注册表

使用 github-action 构建镜像并推送到 docker hub

构建 docker 镜像而不将机密暴露给注册表

如何在使用git的同时构建docker-compose镜像?

docker-compose 构建中的重复图像。如何将 docker-compose.yml 的两个服务正确推送到 Docker hub 注册表?

使用 docker-compose 构建两个不同标记的 docker 镜像

使用docker-compose.yml在个人gitlab构建上启用“ Gitlab注册表”

docker镜像构建与docker构建

获取docker-compose以构建使用父容器的容器

在使用 docker compose 之前是否需要先构建容器?

如何使用 Cloudbuild 在具有不同标签的容器注册表中使用配置文件存储 docker 镜像?

docker 镜像在主机上构建时存储在哪里。它在注册表中吗?

使用 Azure DevOps Pipelines 和 docker-compose 构建和推送 docker 镜像到 ACR 时出现身份验证错误

docker-compose 使用新标签构建

使用Docker Compose构建Apache Mesos集群

使用Docker API推送到私有注册表

docker compose 无法构建

docker-compose.yml覆盖删除镜像构建

如何在 docker-machine 中使用安全的 docker 注册表镜像?

使用Docker私有注册表的Kubernetes中没有ssl的Docker拉镜像

为什么我的docker镜像没有使用正确版本的代码通过“ docker-compose build”构建?

如何使用Maven构建Docker镜像?

如何使用 Docker API 构建镜像?