Oamc

Docker Compose 编排 · 修改记录

这是 container/docker-compose.md 的每次改动内容,按时间从新到旧。其他文章一起提交的部分不会出现在这里。

#1 2026-10-18 +80 −0 docs: 新增容器/安全分类,补 Windows 组策略与 Linux 内核救援,共 11 篇 69302a9
 new file mode 100644
 @@ -0,0 +1,80 @@
+---
+tags: [Docker, Compose, 编排]
+order: 20
+---
+
+# Docker Compose 编排
+
+## 场景
+
+一个应用要连数据库、缓存、反向代理,几个容器一起起,手工 `docker run` 太麻烦。
+
+## 前置条件
+
+- 已装 Docker 和 compose 插件(`docker compose version`)
+- 目录规划好:配置文件、数据卷分开
+- 想清楚数据卷放哪,别用匿名卷
+
+## 配置
+
+```yaml
+# docker-compose.yml
+services:
+  db:
+    image: mysql:8.0
+    restart: always
+    environment:
+      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
+      MYSQL_DATABASE: appdb
+    volumes:
+      - ./data/mysql:/var/lib/mysql
+    healthcheck:
+      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
+      interval: 10s
+      retries: 5
+
+  app:
+    image: registry.corp.local/app:1.2.0
+    restart: always
+    depends_on:
+      db:
+        condition: service_healthy
+    environment:
+      DB_HOST: db
+    volumes:
+      - ./config:/app/config:ro
+    ports:
+      - "8080:8080"
+```
+
+```bash
+docker compose up -d
+docker compose ps
+docker compose logs -f app
+docker compose down          # 保留数据
+docker compose down -v       # 连数据卷一起删
+```
+
+## 验证
+
+```bash
+docker compose ps
+docker compose config        # 渲染后的配置
+curl -I http://127.0.0.1:8080
+```
+
+## 回滚
+
+```bash
+docker compose down
+docker compose up -d         # 回到上一个镜像版本前先改 image tag
+```
+
+## 坑
+
+- **`down -v` 会删掉命名卷**,数据全没,执行前看清。
+- `depends_on` 默认只等容器启动,不等服务就绪,要配 `healthcheck` + `condition`。
+- 相对路径 `./data` 是相对 compose 文件所在目录,不是当前目录。
+- 环境变量写在 `.env` 里不要提交到 Git。
+- 改完 compose 文件要 `up -d` 才会生效,只 `restart` 不改配置。
+- 多个 compose 项目在同一台机器上,项目名冲突会互相覆盖。