本文翻译自官方文档。
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以通过compose.yml
文件来配置应用程序的服务,然后,使用一个命令,从配置中创建并启动所有服务。compose.yml
文件的编写规范由Compose规范定义。Compose规范允许您定义与平台无关的基于容器的应用程序。这样的应用程序被设计为一组容器,这些容器必须与足够的共享资源和通信通道一起运行。
顶级属性是由规范定义的,用于向后兼容。它只是提供信息。
image: redis
image: redis:5
image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis
command: bundle exec thin -p 3000
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
ENTRYPOINT
指令。entrypoint: /code/entrypoint.sh
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "8000-9000:80"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
services:
backend:
image: example/backend
volumes:
- type: volume
source: db-data
target: /data
volume:
nocopy: true
- type: bind
source: /var/run/postgres/postgres.sock
target: /var/run/postgres/postgres.sock
volumes:
db-data:
networks:
db-data:
driver: overlay
networks:
mynet1:
driver: overlay
attachable: true
services:
proxy:
image: example/proxy
networks:
- outside
- default
app:
image: example/app
networks:
- default
networks:
outside:
external: true
networks:
network1:
name: my-app-net
它也可以与外部属性一起使用来定义Compose应该检索的平台网络:
networks:
network1:
external: true
name: "${NETWORK_ID}"
services:
backend:
image: example/database
volumes:
- db-data:/etc/data
volumes:
db-data:
external: true
volumes:
db-data:
name: "my-app-data"
如有需要可查看官网
如有需要可查看官网
使用Compose,您可以通过多种方式在容器中设置环境变量。您既可以使用Compose文件,也可以使用CLI。
Docker Compose中的.env文件是一个文本文件,用于定义环境变量,这些变量在运行Docker Compose up时应该对Docker容器可用。该文件通常包含环境变量的键值对,它允许您在一个地方集中和管理配置。如果需要存储多个环境变量,.env文件很有用。.env文件是在容器中设置环境变量的默认方法。env文件应该放在项目目录的根目录中,紧邻compose.yaml文件。
$ cat .env
TAG=v1.5
在compose.yml中可以直接引用.env文件中定义的变量:
$ cat compose.yml
services:
web:
image: "webapp:${TAG}"
您可以在撰写中使用多个.env文件。Docker Compose会按照指定的顺序读取它们。如果同一个变量在多个文件中定义,最后一个定义优先:
services:
webapp:
image: my-webapp-image
env_file:
- .env
- .env.override
.env文件的语法如下:
${VAR:-default}
:VAR的值已设置且不为空,否则VAR的值为default${VAR-default}
:VAR的值已设置,否则VAR的值为default${VAR:?error}
:VAR的值已设置且不为空,否则异常退出${VAR?error}
:VAR的值已设置,否则异常退出${VAR:+replacement}
:如果VAR的值已设置且非空,则替换,否则为空${VAR+replacement}
:如果VAR的值已设置且非空,则替换,否则为空您可以直接在Compose文件中设置环境变量,而无需使用.env文件,在Compose .yml中使用environment
属性。。
web:
environment:
- DEBUG=1
您可以在主机或执行docker compose
命令的shell环境中使用现有的环境变量。如果未设置环境变量,Compose将使用空字符串代替。
通过剖面可以有选择地启动服务,帮助您调整Compose应用程序模型,以适应各种用途和环境。这是通过将每个服务分配给零个或多个剖面来实现的。服务通过profiles
属性实现剖面,该属性接受一个剖面名称数组:
services:
frontend:
image: frontend
profiles: [frontend]
phpmyadmin:
image: phpmyadmin
depends_on: [db]
profiles: [debug]
backend:
image: backend
db:
image: mysql
docker compose --profile debug up
docker compose --profile frontend --profile debug up
如果在使用docker compose up
时没有指定剖面,则只启动没有profiles
属性的服务,此外,docker compose up
不会启动不同剖面的依赖项,这意味着目标服务依赖的任何其他服务都应该:
Compose可以从service
下的build
属性和image
属性构建服务:
不要同时使用build
和image
属性,当这两个属性同时出现时,Compose会有一个默认的处理逻辑,并且这个逻辑用户可以自定义配置。
build
属性值可以是以下两种类型:
使用字符串语法,构建上下文可以构建为:
services:
webapp:
build: ./dir
services:
webapp:
build: https://github.com/mycompany/example.git#branch_or_tag:subdirectory
build
也可以是一个对象,其字段定义如下:
build:
context: ./dir
build:
context: .
dockerfile: webapp.Dockerfile
build:
context: .
dockerfile_inline: |
FROM baseimage
RUN some command
build:
context: .
args:
GIT_COMMIT: cdc3b19
build:
context: .
target: prod
此外还有许多属性,详情请看官方文档。
部署规范用于定义在部署时的资源配置等元数据,详情请看官方文档。
开发规范用于定义本地开发时的开发钩子,以便加快本地开发工作流速度,详情请看官方文档。
请查阅官方文档。