主题
Docker Compose
用 YAML 定义并管理多容器应用。命令优先用 docker compose(空格);旧独立包为 docker-compose。
常用命令
bash
# 指定配置文件
docker compose -f compose.yml <command>
# 启动与关闭
docker compose up -d # 后台创建并启动容器
docker compose down # 停止并移除容器、网络
# 已有容器管理
docker compose start # 启动已停止的容器
docker compose stop # 停止容器,保留容器
docker compose restart # 重启容器,不应用新镜像或配置
# 镜像构建与更新
docker compose build # 构建镜像,不启动容器
docker compose pull # 拉取镜像,不启动容器
docker compose up -d --build --force-recreate # 构建镜像并强制重建容器
# 状态与排查
docker compose ps # 查看容器状态
docker compose logs -f # 持续查看日志
docker compose exec api sh # 进入 api 服务容器更新后仍运行旧版本
down 默认不删除或更新镜像,随后 up -d 仍可能使用旧镜像。按部署方式更新,通常无需先执行 down:
bash
# 仓库镜像(image):拉取并应用配置标签的最新镜像
docker compose pull && docker compose up -d
# 源码构建(build):更新源码、构建镜像并重建容器
git pull --ff-only && docker compose up -d --build --force-recreate--ff-only:仅允许快进拉取,分支分叉时停止。--build:启动前构建镜像。--force-recreate:强制重建容器,不更新镜像;up检测到镜像变化时会自动重建,可省略。- 固定版本标签需修改
image才能升级版本。
Compose 文件骨架
Compose Specification 下 version 字段已非必需。
yaml
services:
web:
build:
context: ./web
dockerfile: Dockerfile
ports:
- '8080:8080'
environment:
- API_URL=http://api:3000
volumes:
- ./web:/app
networks:
- webnet
depends_on:
- api
restart: unless-stopped
api:
image: my-api:latest
ports:
- '3000:3000'
networks:
- webnet
volumes:
db-data:
networks:
webnet:文件字段与命令参数对应关系
| Compose 字段 | docker container run |
|---|---|
image | 镜像名 |
container_name | --name |
environment | -e / --env |
env_file | --env-file |
volumes | -v / --mount |
ports | -p / --publish |
networks | --network |
restart | --restart |
command | 镜像后的命令(覆盖 CMD) |
entrypoint | --entrypoint |
working_dir | -w |
user | -u |
补充:
build:需先docker image build,没有单条run等价。depends_on:多容器启动顺序,单容器run无对应项。expose:仅声明端口,不映射到宿主机,不等于-p。
