我创建了以下docker-compose.yml文件来为Django应用构建Docker容器:
version: "2.4"
services:
db:
image: postgres:11
env_file:
- .env_prod_db
volumes:
- db:/var/lib/postgresql/data/
networks:
- net
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
web:
build:
context: .
dockerfile: Dockerfile
env_file:
- .env_prod_web
command: gunicorn roster_project.wsgi:application --disable-redirect-access-to-syslog --error-logfile '-' --access-logfile '-' --access-logformat '%(t)s [GUNICORN] %(h)s %(l)s %(u)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' --workers 3 --bind 0.0.0.0:8000
volumes:
- static:/roster/webserver/static/
networks:
- net
expose:
- 8000
depends_on:
- db
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
nginx:
build: ./nginx
ports:
- 80:80
volumes:
- static:/roster/webserver/static/
networks:
- net
depends_on:
- web
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
networks:
net:
enable_ipv6: true
driver: bridge
ipam:
driver: default
config:
- subnet: fd02::/64
gateway: fd02::1
volumes:
db:
static:
如果我的应用程序的潜在用户首先从Github下载所有源代码,则可以使用此文件来部署我的应用程序。但是,我希望他们能够仅通过使用docker-compose下载我存储在Docker Hub存储库中的Docker映像来部署应用程序。
如果我将Docker映像上传到Docker Hub仓库,是否需要创建一个额外的docker-compose.yml来引用仓库镜像,以便其他人可以在自己的Docker主机上部署我的应用程序?或者我可以以某种方式将构建和部署要求组合到一个docker-compose.yml文件中?
答案 0 :(得分:1)
运行docker-compose
命令时可以use multiple Compose files。最简单的方法是拥有一个列出标准(通常是面向生产)设置的docker-compose.yml
主文件和一个覆盖其设置的docker-compose.override.yml
文件。
例如,基本docker-compose.yml
文件看起来像:
version: "2.4"
services:
db:
image: postgres:11
volumes:
- db:/var/lib/postgresql/data/
web:
image: me/web
depends_on:
- db
nginx:
image: me/nginx
ports:
- 80:80
depends_on:
- web
volumes:
db:
请注意,我已经删除了所有特定于部署的设置(日志记录配置,手动IP覆盖,环境文件);我正在使用Compose提供的default
网络;我避免用Docker卷中的旧内容覆盖静态资产;甚至为我在本地构建的内容提供一个image:
名称。
此生产设置与“实际”生产设置之间的差异可以放在单独的docker-compose.production.yml
文件中:
version: "2.4"
services:
db:
# Note, no image: or other similar settings here;
# they come from the base docker-compose.yml
env_file:
- .env_prod_db
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
web: # similarly
db: # similarly
networks:
default:
enable_ipv6: true
# and other settings as necessary
另一方面,对于开发,您需要提供build:
信息。 docker-compose.development.yml
可以包含:
version: "2.4"
services:
web:
build: .
nginx:
build: ./nginx
然后,您可以使用符号链接将其中一个作为当前替代文件
ln -sf docker-compose.production.yml docker-compose.override.yml
下游部署者将需要基础docker-compose.yml
,其中提到了Docker Hub映像。他们可以使用您认为合适的生产值,也可以使用其他设置。他们不需要其余的应用程序源代码或Dockerfile(尽管它们可能全部都在同一个GitHub存储库中)。