维护业务稳定的关键。本章将详细介绍 Docker Compose 的常用指令,并深入探讨其运行机制。
一、核心运维指令集
在生产环境中,管理多个容器不再需要逐一操作。以下指令是在 docker-compose.yml 所在目录下执行的核心操作:
1. 后台启动所有服务
docker compose up -d 该命令会读取配置文件,自动拉取缺失的镜像,创建网络并按顺序启动所有容器。-d 参数确保程序在后台运行,不会占用当前终端窗口。
[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 Started2. 查看服务运行状态
docker compose ps以列表形式展示当前项目定义的所有容器状态(Running、Exited、Restarting 等),是排查系统是否正常运行的第一步。
[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/tcp3. 实时查看特定服务日志
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-server 和 my-mysql 的 CPU 及内存使用率,从而及时调整 YAML 中的资源限制参数。
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