Docker容器化部署的最佳实践(襄阳开发团队经验)
镜像精简
镜像越小越好——更快的构建/分发/启动速度、更小的攻击面。实践方法:
选用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(自动拉取新镜像并重启容器)。一套下来免费且稳定运行了一年多了。
相关阅读
枣阳企业建站技术选型指南响应式设计与移动优先策略详解
本文专门面向枣阳企业建站的技术科普文章,详细讲解响应式网页设计的原理、移动优先的设计策略、主流前端技术选型,帮助非技术人
枣阳企业数据库选型指南主流数据库应用场景对比分析
面向枣阳企业技术决策者的数据库选型科普文章,对比MySQL、PostgreSQL、MongoDB三种主流数据库的特点、优
枣阳网站SEO技术优化实操指南从代码层面提升搜索排名
从技术开发角度讲解SEO优化的具体实施方法,包括语义化HTML标签、结构化数据标记、网站地图生成、robots.txt配
Nginx性能调优实战:从1万QPS到10万QPS(襄阳运维笔记)
Nginx是最流行的Web服务器之一。本文分享将Nginx处理能力从1万QPS提升到10万QPS的实战经验和具体参数。
枣阳小程序开发技术架构对比微信支付宝抖音小程序差异分析
技术对比分析微信、支付宝、抖音三大平台小程序的技术架构差异、开发语言、能力边界、适用场景,帮助枣阳企业在选择小程序平台时