Docker 部署的红线经验:什么时候用、什么时候别用

691 字
3 分钟
Docker 部署的红线经验:什么时候用、什么时候别用

Docker 很香,但不是所有部署都该用 Docker。用错时机、碰错红线,付出的代价远超省下的环境隔离时间。

什么时候用 Docker#

  • 上游有官方镜像且维护活跃:装一个官方长期维护的服务,直接用现成镜像
  • 依赖复杂:Python / Node 多版本共存,环境互相污染,容器隔离干净
  • 需要隔离环境:不同项目要不同版本的库

什么时候别用 Docker#

  • 简单服务(单个 Python / Node 进程):直接 systemd 托管更轻、更好排查
  • 轻量工具:能走标准输入输出的,不需要容器
  • 大镜像构建(>5GB):构建峰值可能吃掉十几个 G,系统盘扛不住

四条红线(每一条都踩出过事故)#

红线一:容器运行时的 daemon 绝不能随意重启#

systemctl restart docker 会杀掉所有容器,等于一次全站停机。如果你在服务器上还连着对话、跑着业务,这一下全断。

要重启容器,用 docker restart <容器名>。daemon 重启是核弹,单容器重启是手术刀。

红线二:构建前必须看磁盘空间#

一次构建峰值吃掉 25GB,系统盘总共几十 G——直接打满,所有服务卡死。

规则:

  • 构建大东西之前先 df -h
  • 大项目、大数据集放数据盘
  • 系统盘容量是红线,任何超过几个 G 的操作都危险

红线三:容器内访问宿主机,别用 127.0.0.1#

Docker 网桥下,容器里的 127.0.0.1 是容器自己,不是宿主机。容器内要访问宿主机服务:

  • host.docker.internal(Docker 提供的主机别名)
  • 宿主机的服务要监听 0.0.0.0 而不是 127.0.0.1,否则容器连不上

红线四:常驻服务必须 systemd 托管#

不要手动 nohup 起一个长期服务——服务器重启后它就没了。

常驻服务 → systemd unit + systemctl enable(开机自启)

容器网络一句话总结#

容器内 127.0.0.1 = 容器自己
宿主机服务 = host.docker.internal(需监听 0.0.0.0)

长期运行的隐性风险#

容器长期不重启会隐藏 latent bug:内存缓慢泄漏、文件句柄累积、缓存过期逻辑从没触发过。定期滚动重启 + 状态巡检,让这些问题在可控时暴露,而不是在某个高峰期崩。

结论#

Docker 部署的四条红线:

  1. daemon 不随便重启,单容器重启走 docker restart
  2. 构建前先 df -h,大东西放数据盘
  3. 容器访问宿主机用 host.docker.internal,别用 127.0.0.1
  4. 常驻服务 systemd 托管,别裸跑

Docker 解决环境隔离,但环境隔离解决不了磁盘、网络、进程管理的问题。用对时机,别让工具绑架架构。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Docker 部署的红线经验:什么时候用、什么时候别用
https://heaven-1314.github.io/posts/docker-deploy-redlines/
作者
赵培州
发布于
2026-08-05
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
赵培州
AI 应用研发工程师 · 用 Agent 做默认交付
公告
记录 AI 应用落地实践与踩坑经验,欢迎交流。
分类
标签
最新动态
站点统计
文章
32
分类
9
标签
81
总字数
41,808
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.15.6
文章许可
CC BY-NC-SA 4.0