Docker 与 Docker-Compose 的区别
Docker 和 Docker-Compose 是 Docker 生态系统中的两个核心工具,它们有不同的定位和功能:
1. 基本概念区别
特性 | Docker | Docker-Compose |
---|---|---|
工具类型 | 单容器管理工具 | 多容器编排工具 |
配置文件 | 使用 Dockerfile | 使用 docker-compose.yml |
主要用途 | 构建和运行单个容器 | 定义和运行多容器应用 |
命令接口 | docker CLI | docker-compose CLI |
2. 功能区别
Docker
-
专注于单个容器的生命周期管理
-
主要操作:
-
docker build
- 从 Dockerfile 构建镜像 -
docker run
- 运行容器 -
docker stop/start/rm
- 管理容器状态
-
-
需要手动处理容器间的网络和卷连接
Docker-Compose
-
用于管理多个相关联的容器组成的应用
-
主要功能:
-
通过 YAML 文件定义整个应用栈
-
自动处理容器间的网络连接
-
管理共享卷
-
协调服务启动顺序
-
-
常用命令:
-
docker-compose up
- 启动所有服务 -
docker-compose down
- 停止并移除所有服务
-
3. 使用场景对比
适合使用 Docker 的情况:
-
开发单个容器应用
-
需要精细控制容器配置
-
构建自定义镜像
-
测试单个服务
适合使用 Docker-Compose 的情况:
-
开发多服务应用(如前端+后端+数据库)
-
需要定义服务间依赖关系
-
快速复制开发环境
-
一键部署完整应用栈
4. 配置方式对比
Docker 示例(运行 WordPress):
# 先创建网络
docker network create wp-network# 运行MySQL容器
docker run -d --name mysql \-e MYSQL_ROOT_PASSWORD=secret \-e MYSQL_DATABASE=wordpress \--network wp-network \mysql:5.7# 运行WordPress容器
docker run -d --name wordpress \-e WORDPRESS_DB_HOST=mysql \-e WORDPRESS_DB_USER=root \-e WORDPRESS_DB_PASSWORD=secret \-p 8080:80 \--network wp-network \wordpress
Docker-Compose 等效配置(docker-compose.yml):
version: '3'
services:db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: secretMYSQL_DATABASE: wordpresswordpress:depends_on:- dbimage: wordpressports:- "8080:80"environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: secret
5. 版本与发展
-
Docker:核心引擎,持续更新
-
Docker-Compose:
-
传统版本:Python 编写的独立工具(docker-compose)
-
新版本:已集成到 Docker CLI 中(
docker compose
,注意没有横线)
-
总结
简单来说:
-
Docker 像是"单兵作战"工具,适合管理单个容器
-
Docker-Compose 像是"指挥官",可以协调多个容器组成的应用系统
两者通常结合使用 - 用 Docker 构建单个容器镜像,用 Docker-Compose 编排由这些镜像组成的完整应用。