directory search
Compose About versions and upgrading (Compose) ASP.NET Core + SQL Server on Linux (Compose) CLI environment variables (Compose) Command-line completion (Compose) Compose(组成) Compose command-line reference(组合命令行参考) Control startup order (Compose) Django and PostgreSQL (Compose) Docker stacks and distributed application bundles (Compose) docker-compose build(docker-compose构建) docker-compose bundle docker-compose config docker-compose create docker-compose down docker-compose events docker-compose exec docker-compose help docker-compose images docker-compose kill docker-compose logs docker-compose pause docker-compose port docker-compose ps docker-compose pull docker-compose push docker-compose restart docker-compose rm docker-compose run docker-compose scale docker-compose start docker-compose stop docker-compose top docker-compose unpause docker-compose up Environment file (Compose) Environment variables in Compose Extend services in Compose Frequently asked questions (Compose) Getting started (Compose) Install Compose Link environment variables (deprecated) (Compose) Networking in Compose Overview of Docker Compose Overview of docker-compose CLI Quickstart: Compose and WordPress Rails and PostgreSQL (Compose) Sample apps with Compose Using Compose in production Using Compose with Swarm Engine .NET Core application (Engine) About images, containers, and storage drivers (Engine) Add nodes to the swarm (Engine) Apply custom metadata (Engine) Apply rolling updates (Engine) apt-cacher-ng Best practices for writing Dockerfiles (Engine) Binaries (Engine) Bind container ports to the host (Engine) Breaking changes (Engine) Build your own bridge (Engine) Configure container DNS (Engine) Configure container DNS in user-defined networks (Engine) CouchDB (Engine) Create a base image (Engine) Create a swarm (Engine) Customize the docker0 bridge (Engine) Debian (Engine) Default bridge network Delete the service (Engine) Deploy a service (Engine) Deploy services to a swarm (Engine) Deprecated Engine features Docker container networking (Engine) Docker overview (Engine) Docker run reference (Engine) Dockerfile reference (Engine) Dockerize an application Drain a node (Engine) Engine FAQ (Engine) Fedora (Engine) Get started (Engine) Get started with macvlan network driver (Engine) Get started with multi-host networking (Engine) How nodes work (Engine) How services work (Engine) Image management (Engine) Inspect the service (Engine) Install Docker (Engine) IPv6 with Docker (Engine) Join nodes to a swarm (Engine) Legacy container links (Engine) Lock your swarm (Engine) Manage nodes in a swarm (Engine) Manage sensitive data with Docker secrets (Engine) Manage swarm security with PKI (Engine) Manage swarm service networks (Engine) Migrate to Engine 1.10 Optional Linux post-installation steps (Engine) Overview (Engine) PostgreSQL (Engine) Raft consensus in swarm mode (Engine) Riak (Engine) Run Docker Engine in swarm mode Scale the service (Engine) SDKs (Engine) Select a storage driver (Engine) Set up for the tutorial (Engine) SSHd (Engine) Storage driver overview (Engine) Store service configuration data (Engine) Swarm administration guide (Engine) Swarm mode key concepts (Engine) Swarm mode overlay network security model (Engine) Swarm mode overview (Engine) Understand container communication (Engine) Use multi-stage builds (Engine) Use swarm mode routing mesh (Engine) Use the AUFS storage driver (Engine) Use the Btrfs storage driver (Engine) Use the Device mapper storage driver (Engine) Use the OverlayFS storage driver (Engine) Use the VFS storage driver (Engine) Use the ZFS storage driver (Engine) Engine: Admin Guide Amazon CloudWatch logs logging driver (Engine) Bind mounts (Engine) Collect Docker metrics with Prometheus (Engine) Configuring and running Docker (Engine) Configuring logging drivers (Engine) Control and configure Docker with systemd (Engine) ETW logging driver (Engine) Fluentd logging driver (Engine) Format command and log output (Engine) Google Cloud logging driver (Engine) Graylog Extended Format (GELF) logging driver (Engine) Journald logging driver (Engine) JSON File logging driver (Engine) Keep containers alive during daemon downtime (Engine) Limit a container's resources (Engine) Link via an ambassador container (Engine) Log tags for logging driver (Engine) Logentries logging driver (Engine) PowerShell DSC usage (Engine) Prune unused Docker objects (Engine) Run multiple services in a container (Engine) Runtime metrics (Engine) Splunk logging driver (Engine) Start containers automatically (Engine) Storage overview (Engine) Syslog logging driver (Engine) tmpfs mounts Troubleshoot volume problems (Engine) Use a logging driver plugin (Engine) Using Ansible (Engine) Using Chef (Engine) Using Puppet (Engine) View a container's logs (Engine) Volumes (Engine) Engine: CLI Daemon CLI reference (dockerd) (Engine) docker docker attach docker build docker checkpoint docker checkpoint create docker checkpoint ls docker checkpoint rm docker commit docker config docker config create docker config inspect docker config ls docker config rm docker container docker container attach docker container commit docker container cp docker container create docker container diff docker container exec docker container export docker container inspect docker container kill docker container logs docker container ls docker container pause docker container port docker container prune docker container rename docker container restart docker container rm docker container run docker container start docker container stats docker container stop docker container top docker container unpause docker container update docker container wait docker cp docker create docker deploy docker diff docker events docker exec docker export docker history docker image docker image build docker image history docker image import docker image inspect docker image load docker image ls docker image prune docker image pull docker image push docker image rm docker image save docker image tag docker images docker import docker info docker inspect docker kill docker load docker login docker logout docker logs docker network docker network connect docker network create docker network disconnect docker network inspect docker network ls docker network prune docker network rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker pause docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker ps docker pull docker push docker rename docker restart docker rm docker rmi docker run docker save docker search docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker start docker stats docker stop docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker unpause docker update docker version docker volume docker volume create docker volume inspect docker volume ls docker volume prune docker volume rm docker wait Use the Docker command line (Engine) Engine: Extend Access authorization plugin (Engine) Docker log driver plugins Docker network driver plugins (Engine) Extending Engine with plugins Managed plugin system (Engine) Plugin configuration (Engine) Plugins API (Engine) Volume plugins (Engine) Engine: Security AppArmor security profiles for Docker (Engine) Automation with content trust (Engine) Content trust in Docker (Engine) Delegations for content trust (Engine) Deploying Notary (Engine) Docker security (Engine) Docker security non-events (Engine) Isolate containers with a user namespace (Engine) Manage keys for content trust (Engine) Play in a content trust sandbox (Engine) Protect the Docker daemon socket (Engine) Seccomp security profiles for Docker (Engine) Secure Engine Use trusted images Using certificates for repository client verification (Engine) Engine: Tutorials Engine tutorials Network containers (Engine) Get Started Part 1: Orientation Part 2: Containers Part 3: Services Part 4: Swarms Part 5: Stacks Part 6: Deploy your app Machine Amazon Web Services (Machine) Digital Ocean (Machine) docker-machine active docker-machine config docker-machine create docker-machine env docker-machine help docker-machine inspect docker-machine ip docker-machine kill docker-machine ls docker-machine provision docker-machine regenerate-certs docker-machine restart docker-machine rm docker-machine scp docker-machine ssh docker-machine start docker-machine status docker-machine stop docker-machine upgrade docker-machine url Driver options and operating system defaults (Machine) Drivers overview (Machine) Exoscale (Machine) Generic (Machine) Get started with a local VM (Machine) Google Compute Engine (Machine) IBM Softlayer (Machine) Install Machine Machine Machine CLI overview Machine command-line completion Machine concepts and help Machine overview Microsoft Azure (Machine) Microsoft Hyper-V (Machine) Migrate from Boot2Docker to Machine OpenStack (Machine) Oracle VirtualBox (Machine) Provision AWS EC2 instances (Machine) Provision Digital Ocean Droplets (Machine) Provision hosts in the cloud (Machine) Rackspace (Machine) VMware Fusion (Machine) VMware vCloud Air (Machine) VMware vSphere (Machine) Notary Client configuration (Notary) Common Server and signer configurations (Notary) Getting started with Notary Notary changelog Notary configuration files Running a Notary service Server configuration (Notary) Signer configuration (Notary) Understand the service architecture (Notary) Use the Notary client
characters

Compose 支持两种共享通用配置的方法:

  1. 扩展整个撰写文件使用多个组合文件

  1. 扩展个人服务大extends场域

多重合成文件

使用多个组合文件可以使您为不同的环境或不同的工作流自定义组合应用程序。

理解多重组合文件

默认情况下,撰写读取两个文件,docker-compose.yml还有一个可选的docker-compose.override.yml档案。根据惯例,docker-compose.yml包含基本配置。正如其名称所暗示的那样,覆盖文件可以包含对现有服务或全新服务的配置重写。

如果在两个文件中都定义了服务,则使用添加和覆盖配置.

若要使用多个覆盖文件或具有不同名称的重写文件,可以使用-f选项指定文件列表。按照命令行中指定的顺序编写合并文件。docker-compose命令引用有关使用-f

使用多个配置文件时,必须确保文件中的所有路径相对于基本组合文件。这是必需的,因为重写文件不一定是有效的组合文件。覆盖文件可以包含小的配置片段。跟踪服务的哪个片段相对于哪个路径比较困难和混乱,因此,为了使路径更容易理解,必须相对于基文件定义所有路径。

用例

在本节中,有两个用于多个组合文件的常用用例:为不同的环境更改一个组合应用程序,以及对一个复合应用程序运行管理任务。

不同环境

多文件的常见用例是为类似生产环境(可能是生产,分段或CI)更改开发撰写应用程序。为了支持这些差异,你可以将你的 Compose 配置分成几个不同的文件:

从一个基本文件开始,它定义了服务的规范配置。

Docker-Compose.yml

web:
  image: example/my_web_app:latest
  links:    - db    - cache

db:
  image: postgres:latest

cache:
  image: redis:latest

在此示例中,开发配置向主机公开了一些端口,将我们的代码作为卷装入,并构建 Web 图像。

docker-compose.override.yml

web:
  build: .
  volumes:    - '.:/code'
  ports:    - 8883:80
  environment:
    DEBUG: 'true'db:
  command: '-d'
  ports:    - 5432:5432cache:
  ports:    - 6379:6379

当你运行的时候docker-compose up它自动读取重写。

现在,在生产环境中使用 Compose 应用程序将会很好。因此,创建另一个覆盖文件(可能存储在不同的 git 仓库或由不同的团队管理)。

Docker-Compose.prod.yml

web:
  ports:    - 80:80
  environment:
    PRODUCTION: 'true'cache:
  environment:
    TTL: '500'

要使用此产品组合文件进行部署,可以运行

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

这将使用docker-compose.ymldocker-compose.prod.yml(但不包括开发配置docker-compose.override.yml)中的配置部署所有三个服务。

有关产品中的 Compose 的更多信息,请参阅产品。

管理任务

另一个常见的用例是针对组合应用程序中的一个或多个服务运行临时或管理任务。此示例演示运行数据库备份。

Docker-Compose.yml 开始

web:
  image: example/my_web_app:latest
  links:    - db

db:
  image: postgres:latest

docker-compose.admin.yml 中添加一个新服务来运行数据库导出或备份。

dbadmin:
  build: database_admin/
  links:    - db

开始正常的环境运行docker-compose up -d。要运行数据库备份,也要包含docker-compose.admin.yml

docker-compose -f docker-compose.yml -f docker-compose.admin.yml \
    run dbadmin db-backup

扩展服务

注意extends关键字在早期的 Compose 文件格式中支持到 Compose 文件版本2.1(请参阅v1中的扩展和第2版中的扩展),但在 Compose 版本3.x中不受支持。请参阅第3版的添加和删除键摘要以及有关如何升级的信息。请参阅 moby / moby#31101 以关注extends在未来版本中以某种形式添加支持的可能性。

Docker Compose 的extends关键字可以在不同文件之间共享通用配置,甚至可以完全共享不同的项目。如果您有多个服务可以重复使用一组通用配置选项,则扩展服务很有用。使用extends您可以在一个地方定义一套通用的服务选项,并从任何地方引用它。

记住linksvolumes_fromdepends_on从不使用extends服务之间共享。这些例外存在以避免隐式依赖性; 你总是本地定义linksvolumes_from。这可以确保在读取当前文件时,服务之间的依赖关系清晰可见。在本地定义这些也确保对引用文件的更改不会破坏任何内容。

理解扩展配置

中定义任何服务时docker-compose.yml,您可以声明您正在扩展如下的另一个服务:

web:  extends:
    file: common-services.yml
    service: webapp

此指令将编写为重用webapp中定义的服务。common-services.yml档案。假设common-services.yml看起来是这样的:

webapp:
  build: .
  ports:    - "8000:8000"
  volumes:    - "/data"

在这种情况下,您将得到完全相同的结果,就像您编写docker-compose.yml用同样的buildportsvolumes直接定义在web.

您可以进一步在本地定义(或重新定义)配置docker-compose.yml

web:  extends:
    file: common-services.yml
    service: webapp
  environment:    - DEBUG=1
  cpu_shares: 5important_web:  extends: web
  cpu_shares: 10

您还可以编写其他服务并链接web向他们提供服务:

web:  extends:
    file: common-services.yml
    service: webapp
  environment:    - DEBUG=1
  cpu_shares: 5
  links:    - db
db:
  image: postgres

用例

当您有多个具有公共配置的服务时,扩展单个服务非常有用。下面的示例是一个包含两个服务的撰写应用程序:一个 Web 应用程序和一个队列工作程序。这两个服务使用相同的代码库,并共享许多配置选项。

common.yml 中我们定义了通用配置:

app:
  build: .
  environment:
    CONFIG_FILE_PATH: /code/config
    API_KEY: xxxyyy
  cpu_shares: 5

docker-compose.yml 我们定义了使用通用配置的具体服务:

webapp:  extends:
    file: common.yml
    service: app
  command: /code/run_web_app
  ports:    - 8080:8080
  links:    - queue    - db

queue_worker:  extends:
    file: common.yml
    service: app
  command: /code/run_worker
  links:    - queue

添加和覆盖配置

将副本配置从原始服务复制到本地服务。如果在原始服务和本地服务中都定义了配置选项,则本地值取代或扩展原始价值。

对于单值选项imagecommand或者mem_limit,新值替换旧值。

# original service
command: python app.py

# local service
command: python otherapp.py

# result
command: python otherapp.py

buildimage在撰写文件版本1 如属buildimage,使用时编写文件格式的版本1,如果在原始服务中定义了另一个选项,则使用本地服务中的一个选项将导致组合放弃另一个选项。 例如,如果原始服务定义image: webapp本地服务定义build: .则结果服务将具有build: .而不是image选择。 这是因为buildimage不能在版本1文件中一起使用。

对于多值的选项 portsexposeexternal_linksdnsdns_search,和tmpfs,撰写会连接两组的值:

# original service
expose:  - "3000"# local service
expose:  - "4000"  - "5000"# result
expose:  - "3000"  - "4000"  - "5000"

environmentlabelsvolumesdevices情况下,撰写“合并”的条目连同本地定义的值取的优先级:

# original service
environment:  - FOO=original  - BAR=original

# local service
environment:  - BAR=local  - BAZ=local

# result
environment:  - FOO=original  - BAR=local  - BAZ=local

撰写文件

  • 用户指南

  • 安装组合

  • 开始

  • 从Django开始

  • 从Rails开始

  • 从WordPress开始

  • 命令行引用

  • 合成文件引用

Previous article: Next article: