先说结论: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 跑

现在半夜告警响了,我先深呼吸,再看日志——不再手抖了。这套模板救过我三次,希望你永远用不上回滚,但一定要有回滚。

评论

    填昵称就能发,不用注册。站长后台可删。