我无法直接创建文件。但我可以把文章内容直接输出给你。
Docker Compose 命令详解
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用程序的服务,然后使用一个命令,就可以从该配置中创建并启动所有服务。这使得开发、测试和部署多容器应用变得极其简单。
本文将详细介绍 Docker Compose 的常用命令及其用法。
1. Docker Compose 简介
在大型应用中,通常会有多个服务(例如,一个 Web 应用、一个数据库、一个缓存服务等)协同工作。手动管理这些服务的 Docker 容器会非常繁琐。Docker Compose 旨在解决这一问题,它允许你使用一个 docker-compose.yml 文件来定义整个应用栈,包括服务、网络和卷。然后,你可以使用单个命令来启动、停止、重启或管理这些服务。
2. 核心 Docker Compose 命令
以下是最常用的一些 Docker Compose 命令:
2.1 docker compose up – 构建、(重新)创建、启动并连接到服务
这是最常用的命令。它会执行以下操作:
* 构建 (build) 或 拉取 (pull) 尚未存在的服务镜像。
* 创建 (create) 或 重新创建 (recreate) 服务容器。
* 启动 (start) 服务。
* 连接 (attach) 到服务容器的输出。
常用选项:
-d,--detach: 在后台运行容器,不占用当前终端。--build: 在启动前强制重新构建镜像。这在Dockerfile或构建上下文发生变化时非常有用。--no-deps: 不启动链接的服务。--no-recreate: 如果容器已经存在,则不重新创建它。--force-recreate: 强制重新创建容器,即使其配置没有发生变化。--abort-on-container-exit: 任何容器退出时,停止所有容器。-V,--renew-anon-volumes: 重新创建匿名卷。
示例:
bash
docker compose up # 启动所有服务并在前台显示日志
docker compose up -d # 在后台启动所有服务
docker compose up --build # 重新构建镜像后启动服务
2.2 docker compose down – 停止并移除服务
此命令会停止 up 命令启动的容器,并移除这些容器、网络和卷。
常用选项:
--volumes,-v: 移除docker-compose.yml文件中声明的匿名卷和已挂载的具名卷。--rmi all: 移除所有镜像(等同于docker rmi)。--rmi local: 移除只由 compose 文件中的服务生成的镜像。--remove-orphans: 移除在docker-compose.yml文件中未定义但与项目相关的服务容器。
示例:
bash
docker compose down # 停止并移除所有服务、网络
docker compose down -v # 停止并移除所有服务、网络和卷
docker compose down --rmi all # 停止并移除所有服务,并删除所有镜像
2.3 docker compose start – 启动已停止的服务
此命令用于启动一个或多个已停止的服务,但不会重新创建它们。
示例:
bash
docker compose start # 启动所有已停止的服务
docker compose start web db # 启动 web 和 db 服务
2.4 docker compose stop – 停止运行中的服务
此命令用于停止一个或多个运行中的服务,但不会移除容器。
**常用选项:
-t,--timeout <seconds>: 停止容器的超时时间(默认为 10 秒)。
示例:
bash
docker compose stop # 停止所有运行中的服务
docker compose stop web # 停止 web 服务
2.5 docker compose restart – 重启服务
此命令用于重启一个或多个服务。
常用选项:
-t,--timeout <seconds>: 重启容器的超时时间(默认为 10 秒)。
示例:
bash
docker compose restart # 重启所有服务
docker compose restart web # 重启 web 服务
2.6 docker compose ps – 列出服务容器
此命令会列出项目中所有服务的容器。
常用选项:
-a,--all: 显示所有容器(包括已停止的)。-q,--quiet: 只显示容器 ID。
示例:
bash
docker compose ps # 列出当前正在运行的服务容器
docker compose ps -a # 列出所有服务容器(包括已停止的)
2.7 docker compose logs – 查看服务日志
此命令用于查看一个或多个服务的日志输出。
常用选项:
-f,--follow: 跟踪日志输出(实时显示)。-t,--timestamps: 显示时间戳。--tail <number>: 从日志末尾显示指定行数。
示例:
bash
docker compose logs # 查看所有服务的日志
docker compose logs -f web # 实时跟踪 web 服务的日志
docker compose logs --tail 50 db # 查看 db 服务最近 50 行日志
2.8 docker compose build – 构建或重建服务镜像
此命令用于构建或重建 docker-compose.yml 文件中定义的服务镜像。如果你修改了 Dockerfile,可以使用此命令更新镜像。
常用选项:
--no-cache: 构建镜像时不使用缓存。--pull: 在构建前尝试拉取更新的基础镜像。
示例:
bash
docker compose build # 构建所有服务的镜像
docker compose build web # 构建 web 服务的镜像
2.9 docker compose pull – 拉取服务镜像
此命令用于拉取 docker-compose.yml 文件中定义的所有服务镜像的最新版本。
示例:
bash
docker compose pull # 拉取所有服务镜像
docker compose pull db # 拉取 db 服务的镜像
2.10 docker compose exec – 在运行中的容器中执行命令
此命令允许你在正在运行的服务容器中执行任意命令。
常用选项:
-d,--detach: 在后台运行命令。-T: 禁用伪 TTY 分配(例如,当命令没有交互式输入时)。-u,--user <user>: 以指定用户身份运行命令。
示例:
bash
docker compose exec web bash # 进入 web 服务的 bash 终端
docker compose exec -T db psql -U user -d database # 在 db 容器中执行 psql 命令
2.11 docker compose run – 运行一次性命令
此命令用于在服务容器中运行一次性命令。与 exec 不同,run 会创建一个新的临时容器来运行命令,通常用于一次性任务,如数据库迁移、种子数据等。
常用选项:
-d,--detach: 在后台运行命令。--name <name>: 为容器指定名称。--rm: 命令执行完毕后自动删除容器。-e,--env <KEY=VALUE>: 设置环境变量。-p,--publish <port>: 发布端口。
示例:
bash
docker compose run --rm web python manage.py migrate # 运行 web 服务的数据库迁移命令
docker compose run --rm --entrypoint bash web # 覆盖 entrypoint,直接进入 bash
2.12 docker compose config – 验证和查看配置
此命令会验证 docker-compose.yml 文件的配置,并打印出合并后的配置信息。这对于调试配置问题非常有用。
常用选项:
-q,--quiet: 只验证配置,不打印输出,如果配置有效则返回 0,否则返回非 0。--services: 打印服务名称列表。--volumes: 打印卷名称列表。
示例:
bash
docker compose config # 验证并打印完整的配置
docker compose config --services # 只列出服务名称
3. 全局选项
Docker Compose 命令还支持一些全局选项,这些选项通常放在 docker compose 之后,具体命令之前。
-f <file>,--file <file>: 指定 Compose 文件路径。默认为docker-compose.yml。-p <project_name>,--project-name <project_name>: 指定项目名称。Compose 使用项目名称作为容器、网络和卷的前缀,以避免命名冲突。默认为当前目录名。--env-file <file>: 指定一个或多个环境变量文件。
示例:
“`bash
使用非默认的 compose 文件
docker compose -f docker-compose.prod.yml up -d
指定项目名称
docker compose -p myapp up -d
“`
4. 总结
Docker Compose 极大地简化了多容器应用的开发和部署。掌握这些核心命令,可以让你更高效地管理和操作你的 Dockerized 应用程序。通过 docker-compose.yml 文件声明应用结构,再配合 docker compose up、docker compose down 等命令,即可实现对整个应用生命周期的全面控制。
提示:
* 始终确保你的 docker-compose.yml 文件格式正确。可以使用 docker compose config 命令进行验证。
* 在生产环境中,通常会使用不同的 Compose 文件(例如 docker-compose.prod.yml)来定义生产环境特有的配置。
* 如果你遇到问题,查看 docker compose logs 是第一步。