在容器化应用开发与运维中,Docker Compose 是一个不可或缺的工具。通过简单的命令行操作,我们可以轻松管理多容器应用的生命周期。本文将深入解析 Docker Compose 中常用命令的功能、行为及使用场景,帮助你更高效地构建、启动、管理和调试容器化应用。
一、镜像管理
1. docker compose build
- 功能:用于构建或重新构建服务的镜像。
- 具体行为:
- 如果服务的镜像已经存在,
build
命令会根据Dockerfile
和上下文(context)重新构建镜像。 - 如果服务的镜像不存在,
build
命令会根据Dockerfile
从头开始构建镜像。 - 默认情况下,
build
命令会拉取基础镜像的最新版本(如果指定了pull
选项)。
- 如果服务的镜像已经存在,
- 使用场景:
- 当你修改了
Dockerfile
或者上下文中的文件时,需要重新构建镜像。 - 在第一次部署服务时,需要构建镜像。
- 当你修改了
2. docker compose pull
-
功能:拉取服务依赖的镜像。
-
具体行为:
- 从镜像仓库(如 Docker Hub)下载
docker-compose.yml
中定义的镜像。 - 不构建本地镜像,仅拉取已存在的远程镜像。
- 结合
--ignore-pull-failures
可忽略拉取错误。
- 从镜像仓库(如 Docker Hub)下载
-
使用场景:
- 更新远程镜像到最新版本。
- 在部署前确保本地存在最新镜像。
-
示例用法:
# 拉取所有服务的镜像 docker compose pull # 拉取特定服务的镜像(如 postgres) docker compose pull postgres
二、容器管理
1. docker compose up
- 功能:构建、创建并启动服务。
- 具体行为:
- 如果服务的镜像不存在,
up
命令会调用build
来构建镜像。 - 如果服务的容器不存在,
up
命令会创建并启动容器。 - 如果服务的容器已经存在但未运行,
up
命令会启动容器。 up
命令还会根据docker compose.yml
文件中的配置,启动依赖的服务。
- 如果服务的镜像不存在,
- 使用场景:
- 在开发过程中,快速启动整个应用栈。
- 在部署时,启动所有服务并确保它们正常运行。
- 默认情况下,
up
命令会在前台运行,并显示服务的日志输出。如果需要在后台运行,可以使用docker compose up -d
。
2. docker compose down
- 功能:停止并移除容器、网络、卷等资源。
- 具体行为:
down
命令会先调用stop
停止所有正在运行的容器。- 然后删除所有由
docker compose up
创建的容器。 - 删除由
docker compose up
创建的网络。 - 删除由
docker compose up
创建的卷(默认情况下,匿名卷也会被删除,但命名卷不会被删除)。 - 删除由
docker compose up
创建的配置文件中定义的镜像(如果指定了--rmi
选项)。
- 使用场景:
- 当你需要完全清理由