Docker容器化部署的最佳实践(襄阳开发团队经验)

2026-08-07 阅读 2 技术博客

镜像精简

镜像越小越好——更快的构建/分发/启动速度、更小的攻击面。实践方法:

选用Alpine基础镜像(5MB左右)代替Ubuntu(70MB+)或CentOS(200MB+)。只在同一层RUN中组合相关命令(减少层数)。每层RUN后清理缓存(ap-get clean / yum clean all)。使用.dockerignore排除不需要的文件(.git/node_modules/*.log等)。

示例:一个Node.js应用镜像从原来的850MB优化到了180MB。拉取时间从3分钟降到了20秒。

安全管理

容器不等于安全。实际上容器共享宿主机内核,隔离性不如VM。必须注意:

不要用root用户运行容器进程(Dockerfile中加USER指令)。不要在镜像中硬编码密钥/密码(用环境变量或Secret管理)。及时更新基础镜像(定期rebuild取最新安全补丁)。限制容器资源(cpu/memory)防止恶意进程耗尽宿主机资源。只开放必要的端口(不要-p 80:80 -p 3306:3306这样把数据库端口也暴露出去)。

我们在{CITY}维护的一批容器中发现,约40%的容器是以root权限运行的。这是一个很大的安全隐患。

日志管理

容器的默认日志驱动(json-file)会把日志写到/var/lib/docker/目录下。如果不管理,日积月累会撑满磁盘。

推荐做法:配置log-driver和log-opt限制单个日志文件大小和数量。或者使用集中的日志方案(ELK/Loki/Fluentd)把日志收集到统一的地方。

我们遇到过一次事故:一台服务器的Docker日志占用了127GB磁盘空间导致服务宕机。后来加了日志轮转策略(每个日志文件最大10M最多保留3个)彻底解决了这个问题。

健康检查

Dockerfile或docker-compose.yml中一定要定义HEALTHCHECK。这样Docker引擎能自动检测容器是否健康,不健康时可以自动重启。

示例:HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD curl -f http://localhost/health || exit 1

配合restart policy: unless_always,可以实现基本的自我恢复能力。

编排工具

单机用docker-compose就够了(开发环境和轻量生产环境都适用)。多机集群考虑Kubernetes(如果团队有能力维护)或者Docker Swarm(K8s的轻量替代品,学习成本低很多)。

对于{CITY}的大多数中小企业来说,docker-compose + 一两台服务器就够用了。没必要一上来就上K8s,运维复杂度会指数级上升。

CI/CD集成

把Docker构建集成到CI流水线中:代码提交→自动构建镜像→推送到镜像仓库→触发更新部署。整个过程可以在10分钟内完成从代码提交到线上发布。

我们用的方案是GitHub Actions + 阿里云ACR + 服务器上的Watchtower(自动拉取新镜像并重启容器)。一套下来免费且稳定运行了一年多了。

相关阅读

电话咨询 微信咨询 在线咨询 返回顶部
xycx202108

微信扫码咨询

×