简介

引用 菜鸟教程
引用 csdn

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 执行 docker-compose up 命令来启动并运行整个应用程序。

安装

docker-compose与docker关系

引用docker官网

Compose file format Docker Engine release
Compose specification 19.03.0+
3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+

群晖的7.2使用的对应版本为

|Compose file format |Docker Engine release|
|v2.9.0|20.10.23|

yaml 格式

yaml格式一般缩进两个字符,且不支持Tab符号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
version: '3' # 指定本 yml 依从的 compose 哪个版本制定的。
services: # 服务
  web: #具体的运行容器1
container_name: my-web-container #指定自定义容器名称,而不是生成的默认名称。
labels:
description1: description1
description2: description2 # key-value形式
image: nginx:latest
  build: . # Dockerfile构建路径.代表当前路径 也可以详细配置

    volumes: # 路径映射? 数组形式,也可详细配置
    - "/docker/a:/config" #映射本地路径/docker/a到容器路径/config
    - "logvolume01:/var/log"
volumes: # 详细挂载方式
# 卷 (volume)
- type: volume
source: ngx-cfg-data
target: /etc/nginx
volume:
nocopy: true
# 挂载 (bind)
- type: bind
source: /home/static
target: /usr/share/nginx/html
environment: # 两种格式 key-value形式或者数组格式
DEV_ENV: test
SESSION_SECRET:
environment:
- DEV_ENV=test
- SESSION_SECRET
network_mode: host # bridge host none
    ports: # 监听映射端口 数组形式
    - "5000:5000"
expose: # 暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定容器内部的端口为参数
- "80"
- "443"

networks: # 网络配置 aliases :同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。
- network-1 # 顶级networks下的配置
extra_hosts: # host解析
- "registry.yun-ti.com:192.168.0.50"
- "code.yun-ti.com:192.168.0.50"
depends_on: # 容器依赖关系 注意:web 服务不会等待 redis db 完全启动 之后才启动。
- db
- redis
    links: # links标签用来解决的是容器连接问题,会连接到其它服务中的容器
    - redis
cap_add:
- ALL #开启所有权限
cap_drop:
- SYS_PTRACE # 关闭 ptrace权限
cgroup_parent: m-executor-abcd # 为容器指定父 cgroup 组,意味着将继承该组的资源限制。
command: ["bundle", "exec", "thin", "-p", "3000"] # 覆盖容器启动的默认命令。
ulimits: #指定容器的 ulimits 限制值。e.g.指定最大进程数为 65535,指定文件句柄数为65535(软限制<=硬限制)
nproc: 65535
nofile:
soft: 65535
hard: 65535
sysctls: # 配置容器内核参数 可配置对象或数组
net.core.somaxconn: 10240
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=10240
- net.ipv4.tcp_syncookies=0

  redis: #具体的运行容器2
    image: redis
volumes:
ngx-cfg-data:
mysql-data
networks: # 配置顶级nework
network-1:
driver: bridge #设置自定义网络的驱动, bridge(默认)/host/none
network-2:
driver: host

运行

docker-compose up -d 以依赖性顺序启动服务。
docker-compose up <SERVICE> 自动包含 的依赖项。
docker-compose stop 停止容器服务