####前言
经常需要打包各种语言的项目打包成docker镜像 最近有时间整理一下 各种语言打包docker镜像的实践方案
示例
基础镜像选择要求:
1: 尽量选择合适的基础系统 如centos debian ubuntu alpine 一般来说选择debian这种基础镜像总体体积会比较大 但是有分层缓存这个优化 只会在第一次的时候会传输基础镜像层
2: 指定相关sdk版本 不要使用latest 保证各个环境的镜像版本一致
Java
此处以openjdk11为基础镜像 调整默认时区
java web项目默认为spring boot 打包的fatjar 直接启动
1 | FROM openjdk:11 |
Js-前端项目
1 | FROM nginx |
常见问题
- 时区
大多数镜像为默认0时区
需要按需调整为对应时区 如上海时区 +8时区 - 时间
在某些服务中 对时间要求比较严格 需要保持一致 这个时候 需要把镜像链接到ntp授时服务器 保证时间的准确 - 开放服务端口 EXPOSE
基础容器 大多数情况下只开启默认端口 一般需要扩充为需要的端口 例如 443 8443 等 - 数据卷 VOLUME
按照业务需要 考虑是否需要开放数据卷 例如打印出来的log文件 内存快照之类的 需要保存到文件系统中
总结
总的来说 分为基础环境镜像+项目编译的文件打包
注意做好项目编译文件镜像分层就行
基础镜像只做为基础环境 一般不需要调整
然后对项目编译文件做好镜像分层的处理 加快分发速度 减少传输大小