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

时间:2019-11-29 14:16:21

标签: docker docker-compose docker-machine dockerhub

我有以下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中心(或类似中心)的帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

您显示的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的自动化工具将其放置并启动。

要将图像推送到Docker Hub(或其他注册表),您需要同时具有 build:image:的Docker Compose文件。如果您specify both,则在docker-compose build图像时,它们将使用您指定的名称进行标记。然后,您可以docker-compose push两个图像(使用一个命令,但仍作为两个单独的图像)。

在这种环境下,使用multiple overlapping docker-compose.yml files也可能会有所帮助。使基本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

答案 1 :(得分:-1)

您没有部署到DockerHub。您推送到docker hub。 希望此命令可能是您要查找的内容: docker-compose push