Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过使用 YAML 文件来配置应用的服务,它可以简化复杂应用的管理。本文将详细介绍 Docker Compose 配置文件 docker-compose.yml 的常用语法和配置选项。
一、基本结构
Docker Compose 配置文件使用 YAML 格式,文件名通常为 docker-compose.yml。它包含多个服务定义,每个服务定义了一个容器。
示例docker-compose.yml:
version: '3.8' # 指定 Docker Compose 文件的版本
services: # 服务定义部分
web: # 服务名称
image: nginx:latest # 使用的镜像
ports: # 端口映射
- "80:80"
volumes: # 卷映射
- "./html:/usr/share/nginx/html"
networks: # 连接的网络
- my-network
db:
image: mysql:5.7
environment: # 环境变量
MYSQL_ROOT_PASSWORD: example
volumes:
- "db-data:/var/lib/mysql"
networks:
- my-network
# 网络定义部分
networks:
my-network:
# 卷定义部分
volumes:
db-data:
二、配置选项详解
1.version
指定 Docker Compose 文件的版本,以下为常用版本:
version: '3.8'
2.services
定义整个应用的服务,每个服务代表一个 Docker 容器实例。
示例:
services:
web:
image: nginx:latest
3.image
指定服务使用的 Docker 镜像,可以是 DockerHub 上的公开镜像,也可以是私有的镜像:
image: nginx:latest
4.build
用于构建本地 Docker 镜像,指定 Dockerfile 的路径:
build:
context: ./dir
dockerfile: Dockerfile
或者简写形式:
build: ./dir
5.ports
端口映射,可以将容器内部端口映射到主机端口:
ports:
- "8080:80"
6.volumes
卷映射,可以将主机目录或数据卷挂载到容器内部:
volumes:
- "./html:/usr/share/nginx/html" # 主机目录挂载
- "db-data:/var/lib/mysql" # 数据卷挂载
7.environment
设置环境变量,可以直接在配置文件中定义,也可以从外部文件读取:
environment:
MYSQL_ROOT_PASSWORD: example
或者从文件中读取:
env_file:
- .env
8.networks
定义和使用网络,以实现容器之间的通信:
networks:
- my-network
在 networks 中定义具体的网络:
networks:
my-network:
driver: bridge # 网络类型
9.depends_on
定义服务之间的依赖关系,确保在启动服务时按顺序启动:
depends_on:
- db
10.restart
定义容器的重启策略:
restart: always # 可选值为 no, on-failure, always, unless-stopped
11.command
覆盖容器启动时执行的命令:
command: ["bundle", "exec", "puma", "-C", "config/puma.rb"]
12.entrypoint
覆盖容器的默认执行入口点:
entrypoint: ["./entrypoint.sh"]
13.healthcheck
设置容器的健康检查:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
14.logging
配置容器的日志记录选项:
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
三、完整示例
以下是一个包含常用配置的完整示例,用于启动一个包含 Nginx 和 MySQL 的简单应用:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- "./html:/usr/share/nginx/html"
networks:
- my-network
depends_on:
- db
restart: always
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- "db-data:/var/lib/mysql"
networks:
- my-network
restart: always
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 1m30s
timeout: 10s
retries: 3
networks:
my-network:
driver: bridge
volumes:
db-data:
四、运行和管理
1. 启动服务
docker-compose up -d
2. 停止服务
docker-compose down
3. 查看日志
docker-compose logs
4. 重启服务
docker-compose restart
5. 查看容器状态
docker-compose ps
五、总结
通过 Docker Compose 可以简化多容器 Docker 应用的配置和管理。它让开发和部署变得更加容易,实现了应用定义即配置的目标。掌握 Docker Compose 的配置方法,将为您带来更高效的容器化应用开发体验。