Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(通常命名为 docker-compose.yml
),你可以配置应用程序的服务、网络和卷。然后,使用一个简单的命令,你就可以创建并启动所有服务。
1. Docker Compose 的优势
- 简化配置:通过一个 YAML 文件管理多个容器的配置。
- 易于扩展:可以轻松添加新的服务或修改现有服务的配置。
- 一致性:确保开发、测试和生产环境的一致性。
- 自动化:通过简单的命令自动化容器的创建、启动、停止和删除。
2. Docker Compose 文件结构
一个典型的 docker-compose.yml
文件包含以下几个主要部分:
- version:指定 Docker Compose 文件的版本。
- services:定义应用程序的服务。
- networks:定义网络配置。
- volumes:定义数据卷配置。
3. Docker Compose 文件示例
以下是一个简单的 docker-compose.yml
文件示例:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- mynetwork
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
networks:
- mynetwork
volumes:
db_data:
networks:
mynetwork:
4. 常用命令
4.1 启动服务
docker-compose up -d
-d
选项表示在后台运行服务。
4.2 停止服务
docker-compose down
down
命令会停止并删除所有服务容器、网络和卷。
4.3 查看服务状态
docker-compose ps
4.4 查看服务日志
docker-compose logs -f
-f
选项表示实时跟踪日志输出。
4.5 进入服务容器
docker-compose exec <service_name> <command>
例如:
docker-compose exec web bash
4.6 重启服务
docker-compose restart <service_name>
5. 服务配置详解
5.1 image
指定服务的镜像。
image: nginx
5.2 build
指定 Dockerfile 的路径,用于构建镜像。
build: .
5.3 ports
指定端口映射。
ports:
- "8080:80"
5.4 volumes
指定数据卷映射。
volumes:
- ./html:/usr/share/nginx/html
5.5 environment
指定环境变量。
environment:
MYSQL_ROOT_PASSWORD: example
5.6 networks
指定服务使用的网络。
networks:
- mynetwork
5.7 depends_on
指定服务依赖关系。
depends_on:
- db
6. 网络配置
6.1 默认网络
Docker Compose 会自动创建一个默认网络,所有服务都会连接到这个网络。
networks:
default:
6.2 自定义网络
你可以定义自定义网络,并将服务连接到这些网络。
networks:
mynetwork:
7. 数据卷配置
7.1 默认数据卷
Docker Compose 会自动创建一个默认数据卷,所有服务都可以使用这个数据卷。
volumes:
db_data:
7.2 自定义数据卷
你可以定义自定义数据卷,并将服务连接到这些数据卷。
volumes:
db_data:
8. 示例:多服务应用程序
以下是一个包含多个服务的 docker-compose.yml
文件示例:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- mynetwork
depends_on:
- db
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
networks:
- mynetwork
volumes:
db_data:
networks:
mynetwork:
9. 环境变量
Docker Compose 支持使用环境变量来动态配置服务。你可以在 docker-compose.yml
文件中使用 ${VARIABLE}
语法引用环境变量。
9.1 定义环境变量
你可以在 .env
文件中定义环境变量。
MYSQL_ROOT_PASSWORD=example
9.2 引用环境变量
在 docker-compose.yml
文件中引用环境变量。
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
10. 扩展服务
Docker Compose 支持通过 scale
命令扩展服务实例。
docker-compose up -d --scale web=3
11. 总结
Docker Compose 是一个强大的工具,用于定义和运行多容器 Docker 应用程序。通过一个 YAML 文件,你可以轻松管理多个服务的配置、网络和数据卷。希望这些内容能够帮助你更好地理解和应用 Docker Compose。