说明
- 本博客每周五更新一次。
- docker镜像封装是复杂环境软件部署的良好方案,某些程序运行环境软件版本要求严格,且安装复杂,docker能大幅度降低部署难度,只需要搭建同版本docker服务,即可实现平滑迁移。
- 本期博文将介绍docker的小技巧,增加镜像运行稳定性和可维护性。
分享
技巧
基础镜像封装参照上篇博文
镜像启动
- 镜像启动建议添加
--restart=always
参数,设置该容器(启动的镜像是容器)随docker服务启动,防止电脑重启后,容器要手动启动。 - 增加共享目录:
-v 主机目录:容器目录
,虽然docker支持命令级的容器内外文件传输,但共享能更加方便直接操作容器内文件,简化操作流程。
镜像结构
- 镜像结构建议拆分两部分
- 镜像包
- 使用docker export 命令导出的镜像包,内含软件运行的所有系统环境,如机器学习软件首先安装python和相关TensorFlow、numpy等一系列引用库。非系统级软件放入资源包,尽量减小镜像包大小。
- 封装上一步到位,减少不必要的更新。
- 资源包
- 该包以共享目录映射到容器找那个,内部包含项目运行代码、脚本、日志和相关资源文件,如机器学习的网络模型文件。
- 主要将经常修改与镜像拆分开,以此降低镜像服务升级难度,更新时不必重新发布镜像包,更新资源包对应文件,重启服务即可。
- 镜像包
- 拆分镜像包主要目的是将经常更新和稳定的拆分管理,降低升级难度,不必每次都更新镜像包,提升发布更新效率。
镜像优化
- 除了在启动和镜像包结构上优化镜像,镜像内部也需要调整。
- 服务监控
- 容器内创建crontab任务,定时确认容器内服务是否正常运行,异常时自动重启,确保服务随容器运行时。
- 日志自动清理
- 容器内创建crontab任务,定时清理软件日志,避免日志堆积,造成容器运行时间越长,存储越大,直至最后崩溃。
- 服务监控
总结
- 以上是现有容器封装的经验分享,某些方面可能不够完备,欢迎指正。
- 记得有次封装完镜像,环境加代码5G的镜像包,远程传输到外地,再部署到内网,一想到后面每次升级二次封包,头大一圈,思来想去才有了拆包方案,后续更新终于不那么痛苦了。
- 技术之路永无止境,人生坎坷如影随形,没有简单的人生,加油。