Docker Compose
Docker Compose:用于定义和管理多容器应用的工具。它通过一个 YAML 文件来配置所有服务配置,用一条命令就能启动整个应用。Docker Compose 解决了多个容器之间的依赖关系和启动顺序问题,主要用于开发环境、测试环境和 CI/CD 流程中。Docker Compose 文件包含了容器镜像、端口映射、数据卷、环境变量等配置,所有配置集中在一个文件中,便于版本控制和团队协作。
Docker Compose 文件结构
Docker Compose 的核心是 docker-compose.yml
文件,它采用 YAML 格式定义服务、网络和卷。一个基本的 Compose 文件包含以下部分:
- version:指定 Compose 文件格式版本,例如 '3.8'。
- services:定义各个容器服务,每个服务对应一个容器。
- networks:配置自定义网络。
- volumes:声明数据卷。
YAML 文件使用缩进
来表示层级关系
,冒号
表示键值对
,连字符
表示列表项
。
定义了一个 WordPress 的应用配置docker-compose.yml
示例
version: '3.8'
services:
db:
image:mysql:5.7
volumes:
-db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD:password
MYSQL_DATABASE:wordpress
networks:
-backend
wordpress:
image:wordpress:latest
ports:
-"80:80"
environment:
WORDPRESS_DB_HOST:db
WORDPRESS_DB_USER:root
WORDPRESS_DB_PASSWORD:password
depends_on:
-db
networks:
-frontend
-backend
networks:
frontend:
backend:
volumes:
db_data:
这个 WordPress 的应用配置示例中展示了:
- 两个服务:MySQL 数据库和 WordPress。
- 自定义网络:frontend 和 backend。
- 声明数据卷:数据卷 db_data 持久化数据库。
- 设置环境变量:设置 MySQL 数据库和 WordPress 相关环境变量。
- 端口映射:将容器 80 端口映射到主机 80 端口。
- 服务依赖关系:确保数据库服务先启动。
docker-compose.yml配置说明
version
指定使用的 Compose 文件格式版本。不同版本支持的功能不同。目前常用的是 3.x 版本。版本号需要用引号包裹。
示例:
version: '3.8'
services
定义需要运行的容器服务,是 Compose 文件的核心部分。每个服务对应一个容器。服务名称自定义,作为容器的标识。
基本服务配置示例:
services:
web:
image: nginx:latest
ports:
- "80:80"
常用服务配置项:
- image:指定使用的镜像名称和标签。可以从 Docker Hub 获取或使用本地构建的镜像。
- build:如果使用本地 Dockerfile 构建镜像,需要指定构建路径。
build: ./dir
- ports:设置端口映射,格式为 "主机端口:容器端口"。
ports:
- "8080:80"
- volumes:配置数据卷挂载,支持主机路径和命名卷。
volumes:
- /host/path:/container/path
- named_volume:/container/path
- environment:设置环境变量,可以用列表或键值对格式。
environment:
- VAR1=value1
- VAR2=value2
- depends_on:定义服务启动顺序,确保依赖服务先启动。
depends_on:
- db
- restart:设置容器重启策略,比如 always 表示总是自动重启。
restart: always
- command:覆盖容器启动命令。
command: ["python", "app.py"]
完整服务示例:
services:
web:
build:.
ports:
-"5000:5000"
volumes:
-.:/code
environment:
FLASK_ENV:development
depends_on:
-redis
redis:
image:redis:alpine
volumes:
-redis_data:/data
networks
定义自定义网络。容器通过网络名称互相通信。默认会创建 bridge 网络。
示例:
networks:
frontend:
driver: bridge
backend:
driver: bridge
服务中使用网络:
services:
web:
networks:
- frontend
db:
networks:
- backend
自定义网络提供更好的隔离性。不同网络的容器默认不能互相访问。
volumes
声明数据卷。数据卷用于持久化存储和容器间共享数据。
示例:
volumes:
db_data:
driver: local
app_data:
driver: local
服务中使用卷:
services:
db:
volumes:
- db_data:/var/lib/mysql
卷数据独立于容器生命周期。删除容器不会删除卷数据。
Docker Compose 常用操作命令
启动服务:docker-compose up -d
会在后台启动所有服务,-d
表示 detached
模式。
停止服务:docker-compose down
停止并移除所有容器、网络和卷。
查看状态:docker-compose ps
显示各容器的运行状态。
查看日志:docker-compose logs
输出容器日志,加 -f
可以跟踪实时日志。
构建镜像:如果服务使用本地 Dockerfile,docker-compose build
会重新构建镜像。
重启服务:docker-compose restart
,重启所有服务或指定服务。。
单服务操作:可以针对单个服务执行命令,例如 docker-compose start wordpress
。