先说结论:Docker 本身不坑,坑的是「反正有容器兜底」的侥幸心理。
坑一:数据在容器里
第一次部署 MySQL,docker run 一把梭,半年后容器一删——数据跟着陪葬。
现在我的第一原则:有状态的東西,必须挂 volume。
services:
mysql:
image: mysql:8
volumes:
- ./data/mysql:/var/lib/mysql # 数据落到宿主机
- ./backups:/backups # 备份目录单独挂
坑二:升级靠记性
「上次改了配置」这种话,说出口的瞬间就该报警。我的解法是把所有东西塞进一个 docker-compose.yml,版本控制起来:
services:
blog-db:
image: mysql:8
restart: unless-stopped
env_file: .env # 密码不进 git
volumes:
- ./data/mysql:/var/lib/mysql
改完 docker compose up -d,变化一目了然,回滚就是 git revert。
坑三:容器里没有 vim,也救不了你
半夜排障进容器,发现连 curl 都没有,是每个运维人的成人礼。
# 教训:日志别进容器里看,直接看挂出来的
docker compose logs -f --tail 100 blog-db
我的保命清单
- 数据全挂 volume,备份目录单独挂
- 配置全进 git,密码走
.env restart: unless-stopped一律写上- 升级前
docker tag打快照镜像 - 每周
mysqldump到备份盘,脚本用 cron 跑
现在半夜告警响了,我先深呼吸,再看日志——不再手抖了。这套模板救过我三次,希望你永远用不上回滚,但一定要有回滚。
评论
还没有人说话,坐个沙发?