0aa8fe6
这次没有正文改动。
这是 container/Docker Compose 编排.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
69302a9
@@ -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 项目在同一台机器上,项目名冲突会互相覆盖。