-
docker compose
表示调用 Docker Compose 工具,用于管理基于 YAML 文件定义的多容器应用。 -
up
核心指令,作用是根据docker-compose.yml
文件中的配置,创建并启动所有定义的服务、网络、卷等资源。-
如果容器未创建,会先构建镜像(如果定义了
build
)或拉取镜像(如果定义了image
),再启动容器。 -
如果容器已存在但未运行,会直接启动。
-
-
-d
(或--detach
)
让容器在 后台运行(detached 模式),终端不阻塞,不实时打印容器日志。 -
本地开发环境
快速启动一个包含多个服务的完整应用栈(如 Web 服务 + 数据库 + 缓存),无需手动逐个启动容器。 -
编写
docker-compose.yml
文件
定义服务、网络、卷等资源(例如:一个 Python Web 应用 + Redis + PostgreSQL)。yaml
version: '3.8'
version: '3.8' services: web: build: . ports: - "8000:8000" depends_on: - redis - db redis: image: redis:alpine db: image: postgres:13 volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data:
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- redis
- db
redis:
image: redis:alpine
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:-
运行命令
docker compose up -d
在包含docker-compose.yml
的目录下执行: -
结果
-
所有服务在后台启动。
-
Web 服务监听 8000 端口,并自动连接到 Redis 和 PostgreSQL 容器。
-
PostgreSQL 的数据通过卷持久化。
-
-
一键部署测试环境
在测试服务器上,通过一条命令拉起整个应用的容器化版本,简化部署流程。 -
生产环境部署
结合编排好的docker-compose.yml
,确保服务依赖、网络配置、持久化存储等按预期运行。 -
微服务架构
同时管理多个关联的微服务容器,统一控制它们的生命周期。 -
运行命令
docker compose up -d
在包含docker-compose.yml
的目录下执行: -
结果
-
所有服务在后台启动。
-
Web 服务监听 8000 端口,并自动连接到 Redis 和 PostgreSQL 容器。
-
PostgreSQL 的数据通过卷持久化。
-
常用操作补充
命令 | 说明 |
---|---|
docker compose down | 停止并删除所有容器、网络(保留卷) |
docker compose logs | 查看容器日志(可加服务名如 logs web ) |
docker compose ps | 查看运行状态 |
docker compose stop | 停止容器(不删除) |
注意事项
-
文件名称与路径
docker compose -f docker-compose.prod.yml up -d
默认使用当前目录下的docker-compose.yml
,若文件名为其他(如docker-compose.prod.yml
),需通过-f
指定: -
服务依赖
depends_on
仅控制启动顺序,不确保服务已就绪。若需等待服务可用,需结合健康检查(healthcheck
)或其他工具。 -
资源更新
修改docker-compose.yml
后,需重新运行docker compose up -d
以应用变更,但已有数据卷不会被自动删除。
1. Docker:容器化引擎
功能
-
核心能力:构建、运行和管理单个容器(Container)。
-
关键操作:
-
通过
Dockerfile
构建镜像(Image)。 -
通过
docker run
启动容器。 -
管理容器生命周期(启动、停止、删除等)。
-
管理镜像、网络、数据卷等资源。
-
使用场景
-
单容器应用的开发、测试和部署(如运行一个 Nginx 服务器或 Python 脚本)。
-
快速验证某个服务的容器化可行性。
# 构建镜像 docker build -t my-app . # 运行容器(单容器) docker run -d -p 80:80 --name my-web nginx
2. Docker Compose:多容器编排工具
功能
-
核心能力:通过一个 YAML 文件(
docker-compose.yml
)定义和编排多容器应用,管理服务依赖、网络、数据卷等。 -
关键操作:
-
通过
docker compose up
一键启动所有服务。 -
统一管理多个关联容器的生命周期。
-
自动处理容器间的网络通信(通过服务名直接访问)。
-
使用场景
-
需要同时运行多个关联服务的应用(如 Web + 数据库 + 缓存)。
-
开发环境中快速复现多服务协作的完整栈。
-
简化本地测试和持续集成(CI)流程。
# 启动所有服务(后台运行) docker compose up -d # 停止并删除所有关联容器 docker compose down
3. 核心区别对比
特性 | Docker | Docker Compose |
---|---|---|
管理对象 | 单个容器 | 多个容器组成的应用栈 |
配置方式 | 命令行参数或 Dockerfile | YAML 文件(声明式配置) |
网络通信 | 需手动创建网络并连接容器 | 自动创建专用网络,服务名直接通信 |
依赖管理 | 无原生依赖管理 | 通过 depends_on 定义启动顺序 |
适用场景 | 单容器场景 | 多服务协作的复杂环境 |
复杂度 | 简单,适合单一任务 | 简化多容器管理,适合复杂应用 |
4. 协作关系
-
Docker 是基础:Compose 底层依赖 Docker 引擎,本质是对 Docker 命令的封装和增强。
-
Compose 是扩展:通过 YAML 文件将多个 Docker 命令组合成一个连贯的工作流。
5. 实际案例对比
场景:启动一个 Web 应用(需同时运行 Web 服务 + Redis + PostgreSQL)
- # 手动创建网络 docker network create my-network # 启动 PostgreSQL docker run -d --name db --network my-network -e POSTGRES_PASSWORD=secret postgres # 启动 Redis docker run -d --name redis --network my-network redis # 启动 Web 应用(假设镜像已构建) docker run -d --name web --network my-network -p 8000:8000 my-web-app
-
Docker Compose 实现:
# docker-compose.yml version: '3.8' services: web: image: my-web-app ports: - "8000:8000" depends_on: - db - redis db: image: postgres environment: POSTGRES_PASSWORD: secret redis: image: redis运行:
docker compose up -d # 一键完成所有操作