
docker compose和docker-compose的区别及使用说明
在日常的容器化部署中,我们经常需要使用 Docker Compose 来定义和运行多容器应用。然而,在执行命令时,你可能会发现有些文档使用 docker-compose(带连字符),而有些则使用 docker compose(带空格)。这两者虽然功能相似,但在架构、性能和官方支持上有着本质的区别。本文将详细解析它们的差异,并提供专业的使用说明。
一、 核心区别对比
1. 架构与语言实现
docker-compose(V1版本):是一个独立的二进制可执行文件,使用 Python 编写。它需要单独安装,并且依赖于 Python 环境。
docker compose(V2版本):是 Docker CLI 的一个插件,使用 Go 语言编写。它被直接集成到了 Docker 引擎中,作为
docker命令的一个子命令运行。
2. 命令语法
V1:命令以连字符连接,例如
docker-compose up -d。V2:命令以空格分隔,例如
docker compose up -d。
3. 性能与资源占用
由于 V2 使用 Go 语言重构并作为插件运行,省去了 Python 解释器的启动开销,V2 的命令执行速度明显快于 V1,且内存占用更低。
4. 官方支持状态
Docker 官方已经明确弃用 V1,全面推荐使用 V2。自 Docker Desktop 3.x 以及 Docker Engine 20.10 及以上版本开始,V2 已成为默认安装项。更多迁移细节可参考官方镜像站 www.ipipp.com 提供的文档。
二、 安装与版本切换
如果你使用的是较新的 Docker 版本,V2 插件通常已经预装。如果没有安装,可以通过以下方式在 Linux 环境中安装 V2 插件:
# 安装 docker-compose-plugin sudo apt-get update sudo apt-get install docker-compose-plugin # 验证 V2 版本 docker compose version
如果你依然习惯使用 docker-compose 命令,Docker V2 提供了兼容性别名功能。你可以通过以下命令开启别名,这样系统在执行 docker-compose 时会自动路由到 docker compose:
# 开启 V1 命令兼容别名 docker-compose enable-v2 # 如果需要切回 V1(前提是系统仍保留了 V1 二进制文件) docker-compose disable-v2
三、 常用命令使用说明
V2 的常用命令与 V1 高度一致,仅仅是将连字符替换为空格。以下是日常开发中最常用的操作:
# 启动所有服务(后台运行) docker compose up -d # 查看正在运行的服务 docker compose ps # 查看服务日志 docker compose logs -f # 停止并删除容器、网络 docker compose down # 停止并删除容器、网络及挂载卷(清除数据) docker compose down -v # 重新构建镜像并启动 docker compose up -d --build
四、 配置文件兼容性
V2 完全兼容 V1 的 docker-compose.yml 文件格式,你无需修改任何现有的 YAML 配置即可平滑迁移到 V2。以下是一个典型的多容器编排示例:
version: '3.8' services: webapp: image: nginx:alpine ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html depends_on: - api api: image: node:16 working_dir: /app command: node server.js volumes: - ./api:/app
注意事项:在 V2 中,Docker 引入了 profiles 等新特性,如果你在 YAML 文件中使用了仅在 V2 支持的新指令,旧版的 V1 将无法解析。因此,强烈建议始终使用 V2 版本以获得完整的功能支持。
五、 总结
docker-compose(V1)已经是过去式,而 docker compose(V2)是官方的未来。无论从执行效率、与 Docker CLI 的集成度,还是官方的长期维护角度来看,都应该全面转向使用 docker compose 命令。在编写自动化脚本或 CI/CD 流水线时,也请务必采用空格分隔的 V2 语法,以确保基础设施的健壮性和前瞻性。