外观
Compose 基础
目录约定
一个服务一个目录,里面放 docker-compose.yml 和 .env:
/opt/app/
├── docker-compose.yml
├── .env
└── data/在这个目录里跑 docker compose 命令,它会自动读同目录的两个文件。
常用命令
bash
docker compose up -d # 起来
docker compose down # 停并删容器(数据卷保留)
docker compose pull # 拉新镜像
docker compose logs -f app # 看某个服务日志
docker compose ps
docker compose exec app sh # 进容器改了 .env 用 restart 不生效
.env 是在创建容器时读的。docker compose restart 只是重启进程,不重建容器,所以新值不会进去。
要 down 再 up -d。这个坑踩过不止一次。
镜像 tag 钉在哪
yaml
image: vendor/app:2 # 只会跟 2.x 分支
image: vendor/app:2.3.1 # 钉死
image: vendor/app:latest # 跟最新,大版本升级可能有破坏性变更钉在大版本号上是个折中:小版本自动跟,大版本手动改。但要记得——升级卡在某个版本不动,先看看是不是 tag 钉死了。
备份
一般三样东西:
- compose 目录本身(配置)
- 数据卷 / 挂载目录
- 数据库要用它自己的 dump 工具,别直接拷文件
bash
docker compose exec -T db pg_dump -U postgres -d app --clean --if-exists > backup.sql迁移到新机器
老机:
bash
docker compose down
tar czvf app.tar.gz -C /opt app新机:
bash
tar xzvf app.tar.gz -C /opt
cd /opt/app
docker compose up -d新机先装同版本,确认能起来再升级。反过来(新机装了新版然后恢复旧数据)常常因为数据库 migration 版本不匹配起不来。
老机器别急着退,并行留几天。