docker - 使用 docker-compose 在生产环境中部署 docker 容器
问题描述
我创建了以下 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 文件中吗?
解决方案
运行命令时可以使用多个 Compose 文件。docker-compose
最简单的方法是拥有一个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 映像的 base 。如果对他们有意义,他们可以使用您的生产值,或者他们可以使用不同的设置。他们不应该需要其余的应用程序源代码或 Dockerfile(尽管它们可能都在同一个 GitHub 存储库中)。
推荐阅读
- java - 是否可以在不使用字节伙伴生成类的情况下生成 lambda?
- amazon-ec2 - 如何部署与 elasticsearch 一起使用的 angular /flask?
- php - 仅搜索 Excel 文件的最佳方法
- python - 您可以将按钮和按键绑定到 tkinter 中的功能吗?
- visual-studio - 未使用 Kubernetes 服务公开 Visual Studio 应用程序
- html - Html:css禁用用户代理样式表
- java - Hybris : language model not found
- javascript - How to click on each payment method in cypress using iteration?
- chart.js - 如何在 Chart js 中设置时区或避免 DST 问题
- javascript - How Do I Display a Number of Input Elements, Equal to a Selected Number (React.js)