我有以下 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 push
或docker-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] 删除。
我来说两句