fsword / how_docker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

how_docker

docker只有运用于从研发到运维的完整实践才能发挥最大价值,这个系列我想尝试举一些我自己熟悉的软件技术栈,讨论在这些技术中怎么用docker

使用Docker先要理解docker,这里列出几条基本原则,详细讨论请参考我写的《docker为什么》

Docker实践原则

  • 环境一致:开发、测试、线上运维使用同样的image,以确保环境一致

  • 对开发环境友好:各种开发工具本身有很多独特的价值,为提高生产力提供重要帮助,因此对开发环境的各种工具应当基本没有限制或者仅有很少的限制,不因为引入Docker导致常见工具集不可用

  • 整合基础设施:Docker的引入,对研发基础设施必然有冲击,但是这种冲击应当是可预见的,另外,有可能简化对测试和运维需求

结合上述原则,对开发活动来说,主要就是要把环境这件事在开发环节就搞定,下面提出开发活动需要注意的要点。

开发Docker化的要点

  • 构建前移:开发工程师负责直接构建image

    我们把构建活动定义为生成docker image的过程,建设构建系统的目标不再是为了保证环境一致,而只是为了让源码版本与构建版本产生关联。原则上,由开发环节直接交付image必须和构建系统生成的内容一致

  • 实验性

  • 权限放开:所有的container内部都使用root来执行,不再设定运行特有的OS用户

    限制运行服务的用户权限是为了避免多用户OS环境中提升权限破坏安全模型,container本质上是一个单用户系统,因此不必区分应用用户和root用户,所有的安全手段通过对container的限制来实现

附:Docker与程序员的环境问题

程序员学习新技术时处理环境问题往往都不太容易,原因是不了解新的工具链对现有环境的影响,一个不小心就会对现有环境有所破坏,自己又往往不知道。

有鉴于此,有些工程师试图使用虚拟机来解决这个问题,基本思路是,学习一门新的技术,就专门搭建一个新的虚拟机,一切动态库,语言包,或者是编译、链接、打包工具链,都在这个虚拟机中完成,实践下来,这个是很有效的办法,唯一的缺点就是虚拟机的环境成本太高。

Docker可以延续这种思路,但是能避免其缺点。

About