docker-compose 是 Docker 官方用于定义和运行多容器 Docker 应用的命令行工具(现已升级为 docker compose,属于 Docker CLI 的子命令)。它通过一个 YAML 文件(通常是 docker-compose.yml)配置应用的所有服务(如 Web 服务器、数据库、缓存等),然后一键启动、停止或重建整个环境。
核心功能
- 服务编排:将多个容器(服务)作为一个整体管理,定义它们之间的依赖关系(如先启动数据库,再启动 Web 应用)。
- 环境隔离:通过项目名称(默认是目录名)隔离不同环境,避免容器和网络冲突。
- 一键操作:简化多容器应用的部署流程,替代手动执行多个
docker run命令。
常用命令(以 docker compose 为例,旧版 docker-compose 用法类似)
| 命令 | 作用 |
|---|---|
docker compose up | 启动所有服务(加 -d 后台运行) |
docker compose down | 停止并删除所有容器、网络(加 -v 同时删除数据卷) |
docker compose ps | 查看当前项目运行的容器状态 |
docker compose logs | 查看所有服务的日志(加 -f 实时跟踪) |
docker compose exec <服务名> <命令> | 在运行的服务容器中执行命令(如 docker compose exec web bash) |
配置文件示例(docker-compose.yml)
以下是一个简单的 Web 应用 + Redis 缓存的配置:
| |
注意事项
- 版本差异:旧版独立工具
docker-compose已逐步被 Docker CLI 集成的docker compose替代(功能兼容,命令去掉连字符)。 - 配置文件:默认使用当前目录下的
docker-compose.yml,也可通过-f指定其他文件。
当然可以!docker compose 支持通过 -f(或 --file)参数指定任意名称和路径的 YAML 配置文件,甚至可以同时加载多个配置文件进行合并。以下是详细用法:
1. 指定非默认文件名
如果你的配置文件不叫 docker-compose.yml(比如 docker-compose.dev.yml、prod.yml),可以用 -f 直接指定:
| |
2. 指定其他路径的文件
如果文件不在当前目录,支持相对路径或绝对路径:
| |
3. 同时加载多个配置文件(合并配置)
可以通过多次使用 -f 参数叠加多个文件,实现配置的继承和覆盖(后面的文件会覆盖前面的相同配置):
| |
适用场景:比如 docker-compose.base.yml 放通用配置(如服务定义),docker-compose.dev.yml 放开发环境的端口映射、数据卷,docker-compose.prod.yml 放生产环境的资源限制、环境变量。
4. 简化操作:设置环境变量
如果不想每次都敲 -f 参数,可以设置 COMPOSE_FILE 环境变量临时指定默认文件:
| |
注意事项
- 路径基准:配置文件中的相对路径(如
./data数据卷)是相对于配置文件所在目录,而非执行命令的目录。 - 旧版兼容:独立的
docker-compose命令用法完全相同,只需将docker compose换成docker-compose。
张芷铭的个人博客
Comments