概述
- 通过阅读一些优秀的docker镜像,总结归纳出究在封装应用到docker镜像时的一些技巧和方法,分享docker-enterpoint.sh入口脚本模板。
技术背景
- docker的出现让部署和安装app应用变得非常容易,只需要一个Dockerfile文件,轻松完成对一个app应用的封装。
一个优秀的docker镜像需要具备以下几点特征
- 高度裁剪
在满足app运行的情况下,去除掉镜像中不用的服务和软件包,最大程度保持环境的干练性。 - 灵活配置
通过加载配置文件或者环境变量方式,实现不同的配置文件和变量,提供不同的服务或功能。 - 高度复用
可被多个不同的服务所引用启动,一般建议一个镜像仅仅封装一个app应用即可,通过docker-compose将多个应用进行结合部署,提高镜像使用率
镜像封装方式
-
一、在容器中直接封装了应用,容器运行时可直接启动应用,此种方式适用于编译完后的可生成二进制程序或war部署包,利用Dockerfile的builder特性,将生成后的二进制程序包拷贝到新的镜像层进行部署
- 优点:启动快,部署方便,入口脚本编写简单
- 缺点:由于已经完全部署,生成的镜像文件会比较大点,配置文件目录无法挂载到宿主机,实现持久化。
- 注意点:docker容器每次变化的有主机名以及ip地址,mac地址,评估这些变动对应用是否有影响。
-
二、部署操作在容器运行时进行,将所有的软件以及依赖包以文件的形式存放在镜像层中,通过入口执行脚本来执行安装以及配置工作。
- 优点: 镜像比较小
- 缺点:脚本编写复杂,第一次启动比较慢
docker-enterpoint.sh 入口模板
Packages=/packages
# 在命令出错时,立即退出,不再往下继续执行指令
set +e
# 使用变量DEBUG_MODE判断是否进入shell调试模式
# 设置变量默认值
DEBUG_MODE=${
DEBUG_MODE:-"false"}
if [ "${DEBUG_MODE}" == "true" ]; then
set -o xtrace
fi
# 设置root密码