Skip to content
Docker Compose 常用指令

维护业务稳定的关键。本章将详细介绍 Docker Compose 的常用指令,并深入探讨其运行机制。

一、核心运维指令集

在生产环境中,管理多个容器不再需要逐一操作。以下指令是在 docker-compose.yml 所在目录下执行的核心操作:

1. 后台启动所有服务

docker compose up -d 该命令会读取配置文件,自动拉取缺失的镜像,创建网络并按顺序启动所有容器。-d 参数确保程序在后台运行,不会占用当前终端窗口。

bash
[root@icZf6eha8rd3v7ql09taugZ deploy]# docker compose up -d
[+] Running 3/3
 Container my-server      Started                                                                                         0.9s 
 Container my-mysql       Started                                                                                         0.4s 
 Container my-watchtower  Started

2. 查看服务运行状态

docker compose ps以列表形式展示当前项目定义的所有容器状态(Running、Exited、Restarting 等),是排查系统是否正常运行的第一步。

bash
[root@icZf6eha8rd3v7ql09taugZ deploy]# docker compose ps
NAME               IMAGE                                                                                             COMMAND                  SERVICE      CREATED             STATUS             PORTS
my-mysql        mysql:8.0                                                                                         "docker-entrypoint.s…"   db           About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
my-server       crpi-pmtj0vp2pudrfv9b.cn-hangzhou.personal.cr.aliyuncs.com/huanyu-app-space/my-server:latest   "java -jar /app.jar"     server       44 minutes ago      Up 44 minutes      0.0.0.0:1304->1304/tcp, :::1304->1304/tcp, 8080/tcp
my-watchtower   containrrr/watchtower                                                                             "/watchtower --inter…"   watchtower   40 minutes ago      Up 40 minutes      8080/tcp

3. 实时查看特定服务日志

docker compose logs -f server -f(follow)参数用于持续跟踪输出。这对于观察 Spring Boot 的启动过程、SQL 执行情况或排查运行时异常至关重要。

4. 停止并移除容器资源

docker compose down 该命令会停止运行中的容器并将其移除,同时清理自动创建的虚拟网络。只要在 YAML 中配置了 volumes,数据库中的数据将完整保留。

5. 强制重新创建容器

docker compose up -d --force-recreate 当你修改了环境变量或配置,但镜像未变时,可以使用此参数强制 Docker 销毁并重建容器以应用新配置。

6. 清理孤儿容器

docker compose up -d --remove-orphans 如果你在配置文件中删除了某个服务,或者重命名了服务(例如从 app 改为 server),使用此参数可以自动清理掉不再受配置管控的旧容器。

二、运行机制:为什么必须在配置文件目录下执行?

开发者在操作时经常会遇到 no configuration file provided 的报错。这是因为 Docker Compose 的设计遵循 “目录即项目” 的核心原则:

1. 默认配置定位

执行 docker compose 时,程序会自动在当前工作目录 (Current Working Directory) 中寻找名为 docker-compose.yml 的文件。如果不在该目录下,Docker 引擎无法获知你需要管理哪些服务、使用哪些镜像。

2. 项目隔离与命名空间

Docker Compose 会默认使用当前文件夹的名称作为项目的前缀(Project Name)。

  • 示例:若你在 /home/my/deploy 目录下运行,Docker 会自动创建一个名为 deploy_default 的虚拟网络。
  • 这种机制确保了同一台服务器上即使运行多个不同的项目,它们之间的网络和容器也不会发生命名冲突。

3. 相对路径解析

在配置文件中,经常会用到相对路径挂载(如 ./mysql/data:/var/lib/mysql)。Docker 引擎需要以当前目录作为基准点来解析这些路径。如果脱离了所在目录,路径映射将会失效,导致挂载失败。

4. 远程操作方案

若确实需要在其他路径下操作,必须使用 -f 参数显式指定文件路径: docker compose -f /home/my/deploy/docker-compose.yml up -d 但在实际运维中,最专业且规范的做法依然是先 cd 进入部署目录,再执行相关指令。

三、运维小贴士:资源监控

启动成功后,建议配合以下命令监控资源占用情况,防止单个容器耗尽服务器内存: docker stats 通过该指令,你可以实时看到 my-servermy-mysql 的 CPU 及内存使用率,从而及时调整 YAML 中的资源限制参数。

bash
CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O        PIDS
2daf24dd20b7   my-watchtower   0.00%     11.47MiB / 1.715GiB   0.65%     566kB / 165kB    3.33MB / 0B      8
edf48f2c6687   my-server       0.11%     127.9MiB / 1.715GiB   7.28%     1.9kB / 1.89kB   8.34MB / 0B      31
df6773b52485   my-mysql        0.62%     423.3MiB / 1.715GiB   24.10%    140kB / 206kB    73.4MB / 247MB   49