张芷铭的个人博客

docker-compose 是 Docker 官方用于定义和运行多容器 Docker 应用的命令行工具(现已升级为 docker compose,属于 Docker CLI 的子命令)。它通过一个 YAML 文件(通常是 docker-compose.yml)配置应用的所有服务(如 Web 服务器、数据库、缓存等),然后一键启动、停止或重建整个环境。

核心功能

  1. 服务编排:将多个容器(服务)作为一个整体管理,定义它们之间的依赖关系(如先启动数据库,再启动 Web 应用)。
  2. 环境隔离:通过项目名称(默认是目录名)隔离不同环境,避免容器和网络冲突。
  3. 一键操作:简化多容器应用的部署流程,替代手动执行多个 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 缓存的配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
version: '3.8'  # Compose 文件格式版本
services:
  web:
    image: nginx:alpine  # 使用的镜像
    ports:
      - "8080:80"  # 端口映射(主机:容器)
    depends_on:
      - redis  # 依赖 redis 服务,先启动 redis
  redis:
    image: redis:alpine

注意事项

  • 版本差异:旧版独立工具 docker-compose 已逐步被 Docker CLI 集成的 docker compose 替代(功能兼容,命令去掉连字符)。
  • 配置文件:默认使用当前目录下的 docker-compose.yml,也可通过 -f 指定其他文件。

当然可以!docker compose 支持通过 -f(或 --file)参数指定任意名称和路径的 YAML 配置文件,甚至可以同时加载多个配置文件进行合并。以下是详细用法:

1. 指定非默认文件名

如果你的配置文件不叫 docker-compose.yml(比如 docker-compose.dev.ymlprod.yml),可以用 -f 直接指定:

1
2
# 使用当前目录下的 docker-compose.dev.yml
docker compose -f docker-compose.dev.yml up -d

2. 指定其他路径的文件

如果文件不在当前目录,支持相对路径绝对路径

1
2
3
4
5
# 相对路径:使用上一级目录的 docker-compose.yml
docker compose -f ../docker-compose.yml up -d

# 绝对路径:使用 /path/to/your/config.yml
docker compose -f /home/user/projects/myapp/docker-compose.prod.yml up -d

3. 同时加载多个配置文件(合并配置)

可以通过多次使用 -f 参数叠加多个文件,实现配置的继承和覆盖(后面的文件会覆盖前面的相同配置):

1
2
# 先加载基础配置,再加载开发环境的覆盖配置
docker compose -f docker-compose.base.yml -f docker-compose.dev.yml up -d

适用场景:比如 docker-compose.base.yml 放通用配置(如服务定义),docker-compose.dev.yml 放开发环境的端口映射、数据卷,docker-compose.prod.yml 放生产环境的资源限制、环境变量。

4. 简化操作:设置环境变量

如果不想每次都敲 -f 参数,可以设置 COMPOSE_FILE 环境变量临时指定默认文件:

1
2
3
4
5
6
7
# Linux/macOS
export COMPOSE_FILE=docker-compose.dev.yml
docker compose up -d  # 会自动使用 docker-compose.dev.yml

# Windows PowerShell
$env:COMPOSE_FILE="docker-compose.dev.yml"
docker compose up -d

注意事项

  • 路径基准:配置文件中的相对路径(如 ./data 数据卷)是相对于配置文件所在目录,而非执行命令的目录。
  • 旧版兼容:独立的 docker-compose 命令用法完全相同,只需将 docker compose 换成 docker-compose

Comments