挂载还是构建新镜像

一个Docker镜像就是服务与环境的结合,将我们的服务放到docker镜像提供的环境运行。

这时候有两种方式可以实现。

  • 方式1:编写Dockerfile,在基础镜像上叠加一层形成新的镜像,例如以tomcat为基础镜像,将war复制到镜像内形成一个新的镜像
  • 方式2:不构建新的镜像而是将服务以挂载的形式放到容器内,例如直接运行tomcat镜像,并将war以挂载的形式放到容器内。

两者都能实现相同的功能,那么应该怎么选择呢?以下是我的一些想法

如果你构建的是一个服务,应该使用Dockerfile创建一个新的镜像,这有以下几点考量

逻辑上的新主体

逻辑上,这是一个新的服务,已经发生了质的改变,例如tomcat服务添加war后生成了一个新的服务,这时候不能称为tomcat服务,而是xxx业务服务。

Docker设计理念

从Docker的设计理念来说,Docker就是为了将服务和服务所依赖的环境一起打包,从而避免环境的影响。将服务通过挂载的方式运行显然违背了这个理念,使得环境和服务割裂开来。

功能

从功能来说,挂载是容器和宿主机数据交互的接口,提供配置输入数据,挂载目录输出数据,而不是提供服务。并且Dockerfile可定义服务所需要的环境变量,脚本等,可操作性更强。