docker compose 和 docker-compose 是两个相关但不同的 Docker 编排工具,以下是它们的区别和使用说明:
主要区别
1. 技术实现不同
- docker-compose (旧版):使用 Python 编写的独立工具,通过 pip 安装
- docker compose (新版):Docker CLI 插件,使用 Go 语言编写,集成在 Docker Desktop 中
2. 版本号系统不同
- docker-compose v1:版本号如 1.29.2
- docker compose v2:版本号与 Docker Engine 同步,如 2.17.2
如何区分你使用的是哪个版本?
检查版本:
# v1(旧版)
docker-compose --version
# 输出:docker-compose version 1.29.2, build ...
# v2(新版)
docker compose version
# 输出:Docker Compose version v2.17.2
注意命令格式:
- 旧版:
docker-compose(带连字符)
- 新版:
docker compose(空格分隔)
安装方式
docker-compose (v1)
# Linux 安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 或使用 pip
pip install docker-compose
docker compose (v2)
# Docker Desktop 自动包含(Windows/Mac)
# Linux 安装
sudo apt-get update
sudo apt-get install docker-compose-plugin
# 或手动安装
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
功能对比
兼容性
- v1:不支持新的 Compose 规范特性
- v2:完全支持 Compose Specification,兼容性更好
性能
功能特性
- v2 支持更多新功能,如 profiles、扩展字段等
常用命令示例
基本命令格式对比
# v1 格式
docker-compose up -d
docker-compose down
docker-compose ps
# v2 格式
docker compose up -d
docker compose down
docker compose ps
实际使用示例
# docker-compose.yml 示例
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
# 启动服务(两个版本都支持)
docker-compose up -d # v1
docker compose up -d # v2
# 查看状态
docker-compose ps # v1
docker compose ps # v2
# 查看日志
docker-compose logs -f # v1
docker compose logs -f # v2
# 停止服务
docker-compose down # v1
docker compose down # v2
迁移建议
1. 从 v1 迁移到 v2
# 1. 卸载旧版
sudo rm /usr/local/bin/docker-compose
# 2. 安装新版(Docker Compose Plugin)
# 对于已安装 Docker Desktop 的用户,v2 已自动包含
2. 脚本兼容性处理
# 可以在脚本中创建别名或软链接
sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
# 或使用包装脚本
#!/bin/bash
# 优先使用 v2,回退到 v1
if command -v docker-compose &> /dev/null; then
docker-compose "$@"
elif docker compose version &> /dev/null; then
docker compose "$@"
else
echo "Docker Compose not found"
exit 1
fi
最佳实践
新项目建议使用 v2:
- Docker Desktop 默认包含
- 性能更好,功能更新
- 长期维护支持
生产环境统一版本:
# 在 Dockerfile 中指定
FROM docker:20.10
RUN apk add --no-cache docker-compose
使用兼容的 Compose 文件:
# 使用最新的 Compose 规范
version: '3.8' # 或使用不带 version 的格式
services:
# 服务配置
注意事项
命令差异:
- v2 中某些命令参数可能有细微变化
- v2 不支持
docker-compose run --rm 中的某些旧参数
文件兼容性:
- v2 完全兼容 v1 的 Compose 文件
- v2 支持新的 Compose Specification 格式
性能对比:
- v2 启动速度比 v1 快 2-3 倍
- v2 内存占用更少
总结
- docker-compose (v1):旧版,逐渐淘汰,2021年6月已停止更新
- docker compose (v2):新版,推荐使用,Docker官方维护
建议新用户直接使用 docker compose (v2),现有用户逐步迁移到 v2 以获得更好的性能和功能支持。