问题描述
目前,在容器中使用代码有以下几种方式:
容器启动时:CMD git clone …
镜像构建时:COPY . /whatever
容器运行时:docker run -v $(pwd):/whatever/
那到底应该使用那种???
解决方案
目标,这几种方式的优劣:
#「Best practices for getting code into a container (git clone vs. copy vs. data container)」
说了半天,大家都是从使用场景出发的。场景不同问题不同。
说了半天,大家都是从使用场景出发的。场景不同问题不同。
#「Do I HAVE to ADD my Code Into the Docker Image When Deploying?」
将代码打包到镜像里具有一些优势。
只有部署工作流是正确的,那挂载代码才是可接受的。
将代码打包到镜像里具有一些优势。
只有部署工作流是正确的,那挂载代码才是可接受的。
最终结论
#1 生产环境(复制代码到容器)
在构建时,将代码放入容器中:
(1)启动速度块;
(2)一次构建,到处运行;(一致性、可移植)
(3)可快速回滚(快速切换到上一版本的镜像)
(2)一次构建,到处运行;(一致性、可移植)
(3)可快速回滚(快速切换到上一版本的镜像)
#2 开发环境(使用绑定挂载)
在进行本地开发时,将代码挂载到容器中:
(1)便于调试。日志文件可以写入绑定挂载的目录中。
(2)立即生效。将代码绑定挂载到容器中,修改后可以立即生效;
(2)立即生效。将代码绑定挂载到容器中,修改后可以立即生效;
「绑定挂载」带来的问题:
(1)容器中的进程可以修改、删除主机中绑定挂载的文件。功能强大,但是也存在安全隐患。
(2)绑定挂载暴露文件到容器,降低了容器的安全和隔离。
(2)绑定挂载暴露文件到容器,降低了容器的安全和隔离。