docker-compose.yml配置详解

顶级配置项

  • version 定义了版本信息
  • services 定义了服务的配置信息
  • networks 定义了网络信息,提供给 services 中的 具体容器使用
  • volumes 定义了卷信息,提供给 services 中的具体容器使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 格式
version: "3.8" #这边的版本yml文件的版本号

services: # 容器
servicename: # 服务名字,这个名字也是内部 bridge网络可以使用的 DNS name
image: # 镜像的名字
command: # 可选,如果设置,则会覆盖默认镜像里的 CMD命令
environment: # 可选,相当于 docker run里的 --env
volumes: # 可选,相当于docker run里的 -v
networks: # 可选,相当于 docker run里的 --network
ports: # 可选,相当于 docker run里的 -p
servicename2:

volumes: # 可选,相当于 docker volume create

networks: # 可选,相当于 docker network create
yaml基础知识

大小写敏感,缩进表示层级关系
缩进空格数不重要,相同层级左侧对齐即可。(不允许使用 tab 缩进!)
由冒号分隔的键值对表示对象;一组连词线开头的行,构成一个数组;字符串默认可不使用引号

version配置指令

YML文件版本兼容性,详情请看官网文档

官网文档
Compose file format Docker Engine release
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+

networks配置指令

未显示声明网络,容器会被加入app_default网络中

配置自定义网络
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3'

services:
proxy:
build: ./proxy
networks:
- front
db:
image: postgres
networks:
- back

networks:
front:
driver: host
back:
driver: bridge
配置默认网络
1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'

services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres

networks:
default:
driver: overlay
使用已存在的网络
1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'

services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres

networks:
default:
external:
name: my-pre-existing-network

volumes配置指令

自定义卷供容器挂载使用
1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'

services:
db:
volumes:
- db_data:/var/lib/mysql
wordpress:
volumes:
- wordpress_files:/var/www/html

volumes:
wordpress_files:
db_data: