使用docker compose在生产中部署docker容器

使用docker compose在生产中部署docker容器,docker,docker-compose,Docker,Docker Compose,我创建了以下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: dri

我创建了以下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 repo中的docker图像来部署应用程序

如果我将docker映像上载到docker Hub repo,我是否需要创建一个引用repo映像的附加docker-compose.yml,以便其他人可以在他们自己的docker主机上部署我的应用程序?或者我可以将构建和部署需求以某种方式合并到一个docker-compose.yml文件中吗?

您可以在运行
docker-compose
命令时执行此操作。最简单的方法是使用一个列出标准(通常面向生产)设置的主
docker compose.yml
文件和一个覆盖其设置的
docker compose.override.yml
文件

例如,基本
docker compose.yml
文件可能如下所示:

版本:“2.4”
服务:
db:
图片:博士后:11
卷数:
-db:/var/lib/postgresql/data/
网状物:
图片:me/web
取决于:
-分贝
nginx:
图片:me/nginx
端口:
- 80:80
取决于:
-网
卷数:
db:
注意,我已经删除了所有特定于部署的设置(日志配置、手动IP覆盖、环境文件);我正在使用提供的Compose
default
网络;我避免用Docker卷中的旧内容覆盖静态资产;我提供了一个
图像:
名称,即使是我在本地构建的东西

此设置与“真实”生产设置之间的差异可以放在单独的
docker compose.production.yml
文件中:

版本:“2.4”
服务:
db:
#注意,此处无图像:或其他类似设置;
#他们来自docker-compose.yml基地
环境文件:
-.env_prod_db
登录中:
驱动程序:“json文件”
选项:
最大文件:“5”
最大尺寸:“10米”
web:#同样如此
db:#同样
网络:
违约:
启用ipv6:true
#以及其他必要的设置
另一方面,对于开发,您需要提供
build:
信息
docker compose.development.yml
可以包含:

版本:“2.4”
服务:
网状物:
生成:。
nginx:
构建:./nginx
然后,可以使用符号链接使其中一个成为当前覆盖文件

ln-sf docker-compose.production.yml docker-compose.override.yml
下游部署人员将需要提到docker Hub图像的base
docker compose.yml
。如果对他们有意义,他们可以使用您的生产值,或者他们可以使用不同的设置。他们不应该需要应用程序源代码或docker文件的其余部分(尽管它们可能都在同一个GitHub存储库中)。

当您运行
docker compose
命令时,您可以这样做。最简单的方法是使用一个列出标准(通常面向生产)设置的主
docker compose.yml
文件和一个覆盖其设置的
docker compose.override.yml
文件

例如,基本
docker compose.yml
文件可能如下所示:

版本:“2.4”
服务:
db:
图片:博士后:11
卷数:
-db:/var/lib/postgresql/data/
网状物:
图片:me/web
取决于:
-分贝
nginx:
图片:me/nginx
端口:
- 80:80
取决于:
-网
卷数:
db:
注意,我已经删除了所有特定于部署的设置(日志配置、手动IP覆盖、环境文件);我正在使用提供的Compose
default
网络;我避免用Docker卷中的旧内容覆盖静态资产;我提供了一个
图像:
名称,即使是我在本地构建的东西

此设置与“真实”生产设置之间的差异可以放在单独的
docker compose.production.yml
文件中:

版本:“2.4”
服务:
db:
#注意,此处无图像:或其他类似设置;
#他们来自docker-compose.yml基地
环境文件:
-.env_prod_db
登录中:
驱动程序:“json文件”
选项:
最大文件:“5”
最大尺寸:“10米”
web:#同样如此
db:#同样
网络:
违约:
启用ipv6:true
#以及其他必要的设置
另一方面,对于开发,您需要提供
build:
信息
docker compose.development.yml
可以包含:

版本:“2.4”
服务:
网状物:
生成:。
nginx:
构建:./nginx
然后,可以使用符号链接使其中一个成为当前覆盖文件

ln-sf docker-compose.production.yml docker-compose.override.yml

下游部署人员将需要提到docker Hub图像的base
docker compose.yml
。如果对他们有意义,他们可以使用您的生产值,或者他们可以使用不同的设置。他们不需要应用程序源代码或docker文件的其余部分(尽管它们可能都在同一个GitHub存储库中)。

您可以使用docker hub映像(用户名/映像:标记)而不是build来指定映像。谢谢,因此,在本例中,是否允许为构建和部署使用不同的docker-compose.yml文件?默认情况下,构建也会部署,但会强制您实际构建。如果您希望在没有生成的情况下部署,则需要一个单独的部署。您可以使用docker hub映像(用户名/映像:标记)指定映像,而不是使用build。谢谢,在这种情况下,是否有不同的docker-compose.yml文件用于生成和部署?默认情况下,build也会部署,但会强制您实际生成。如果您正在寻找没有构建的部署,则需要一个单独的部署。