compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件(通常命名为 docker-compose.yaml
或 compose.yaml
),你可以配置所有服务、网络和卷,然后使用一条命令启动整个应用。
特性
增量更新
- 当你修改
docker-compose.yaml
文件并重新启动应用时,Docker Compose 只会重新启动被修改的服务,其他服务不受影响。
数据持久化
文件结构
Docker Compose 文件是一个 YAML 文件,通常包含以下部分:
version
指定 Docker Compose 文件的版本(可选)。
services
定义所有需要运行的服务(容器)。每个服务可以配置镜像、端口、环境变量、卷等。
image
指定服务使用的镜像。
1services:
2 web:
3 image: nginx:latest
ports
映射主机端口到容器端口。
1services:
2 web:
3 ports:
4 - "8080:80"
environment
设置环境变量。
1services:
2 db:
3 environment:
4 MYSQL_ROOT_PASSWORD: my-secret-pw
volumes
挂载主机目录或 Docker 卷到容器内部。
1services:
2 web:
3 volumes:
4 - ./html:/usr/share/nginx/html
restart
设置容器的重启策略。
1services:
2 web:
3 restart: always
networks
指定服务加入的网络。
1services:
2 web:
3 networks:
4 - my-network
depends_on
指定服务之间的依赖关系。
1services:
2 web:
3 depends_on:
4 - db
volumes
定义数据卷,用于持久化数据。
networks
定义自定义网络,用于容器之间的通信。
1networks:
2 my-network:
3 driver: bridge
使用
启动应用
使用以下命令启动应用:
1docker compose -f compose.yaml up -d
先创建网络
再创建卷
然后容器
停止应用
使用以下命令停止应用:
会移除所有容器和网络,但不会删除卷
1docker compose -f compose.yaml down
强制删除所有资源
如果需要删除卷和镜像,可以使用以下命令:
1docker compose -f compose.yaml down --rmi all -v
示例
1version: '3.8'
2
3services:
4 web:
5 image: nginx:latest
6 ports:
7 - "8080:80"
8 volumes:
9 - ./html:/usr/share/nginx/html
10 networks:
11 - my-network
12 depends_on:
13 - db
14
15 db:
16 image: mysql:5.7
17 environment:
18 MYSQL_ROOT_PASSWORD: my-secret-pw
19 volumes:
20 - my-data:/var/lib/mysql
21 networks:
22 - my-network
23
24volumes:
25 my-data:
26
27networks:
28 my-network:
29 driver: bridge