代码放在Docker里面 or 外面

首先需要明确的是:Docker到底能够带来什么样的好处,Docker带来轻量级虚拟化容器方面的优势(资源利用率高,创建快捷,环境纯粹) ?   还是镜像带来的优势(便于部署,记录容器状态,持续集成等)  确定了使用的场景,才好说明代码到底放到什么地方更合适。

举几个例子,可以根据场景灵活的方式使用代码和数据:

场景一:如果做好了所有代码,想分发给其他使用者,这种无疑代码放到image是最佳的,包括数据库初始化脚本等。

场景二:如果是开发环境,代码是用于调试,代码不应该在image里面,代码最好是在本机电脑上,如MacOS,Windows,Linux的个人PC上,那么就通过volume方式进行挂载是最方便的,修改代码直接就可以进行调试。如果开发环境在服务器上,可以通过远程mount的方式,mount到本机进行开发修改。

场景三:如果是测试环境,建议使用git方式,代码不在image中,通过docker exec到容器内pull对应测试tag的代码。当然也可以在宿主机pull,然后docker cp到对应的测试容器。

没有哪种最优,只有最适合的。

===========================

docker部署两种情形:

1)开发环境
由于开发环境代码一直在变动,而且多人通过git协作,于是代码都是放在外面,构建一个运行环境的image,然后代码部分用volume映射进去,方便随时调整。

2)生成环境
我们的生产环境比较独特,一般都是给客户安装成品而不是自己的服务器,一方面为了保护代码,另一方面是减少不必要的麻烦,于是就把代码都构建在image里面,这样直接在客户那边把镜像运行起来就行,只是个下载的时间,也不需要其他操作。

在自己的服务器上,由于基本是内部演示之类,所以完全就是当做开发环境来对待的,参见第一条。

Docker嘛,既然可以虚拟环境,那么怎么合适怎么用吧,目的就是开发的时候启动的快+重新构建快,给客户安装的时候要尽可能的简单。

===========================

1) 镜像相当于模板,开发代码放镜像的话,减低镜像的复用性。

2) 代码放在image里管理是否会造成本地存储和网络传输上不必要的负担。

===========================

实用场景之一:

1、在开发环境,因为code的频繁变更,通过volume方式进行挂载方便。
2、代码提交到git repo后,通过jenkins打包编译,把编译后的代码包生成到docker image中,并打好对应的tag,上传到docker registy。之后进入测试环境进行部署,测试。
3、通过paas ci后的docker image就可以直接在生产环境进行部署了。

猜你喜欢

转载自haiouc.iteye.com/blog/2399826