Docker容器化开发流程(⼀)介绍
⽂章⽬录
⽬标
了解容器化开发模式
了解容器化开发流程
参考: Docker技术⼊门与实战 第⼆版 书籍
以下多引⽤于Docker技术⼊门与实战 第⼆版这本书籍
容器化开发模式
传统开发流程
传统模式中,开发团队在开发环境中完成软件开发,本地完成单元测试,测试通过,则可提交到代码版本管理库;测试团队打包进⾏进⼀步测试。运维团队把应⽤部署到测试环境,开发团队或测试团队再次进⾏测试,没问题后通知部署⼈员发布到⽣产环境。
在上述过程中涉及三个环境:开发、测试和⽣产,以及三个团队:开
发、测试、运维。多个环境和多个团队之间的这种交互,很容易出现彼此环境不⼀致的情况,浪费不必要的⼈⼒物⼒。
在之前的⼯作流程中,基本可以分为测试环境和线上环境两种。
开发阶段:⼀般是本公司的服务器提供测试环境,测试环境提供关系型数据库或者是nosql数据库环境⽀持,开发⼈员本地使⽤本机的jdk和tomcat开发和测试。
测试阶段:开发⼈员将项⽬部署到测试环境下,在测试环境中安装jdk和tomcat部署运⾏项⽬,供测试⼈员测试
线上阶段:通常要把各种服务(⽐如nginx,mysql,jdk,tomcat,redis等等),安装到由客户提供的线上环境中,再部署和运⾏项⽬。
出现的问题:测试环境和线上环境会存在差异,本来在测试环境项⽬好好的,到线上环境后项⽬就不能正常运⾏。这是真实存在的,何况在客户提供的服务器,线上可能还运⾏着很多服务,很多时候不能快速定位项⽬为什么会运⾏报错,也不能擅⾃修改某些服务配置。
或者本⾝的测试环境可能是windows,但是现在换成了linux。
想要解决的问题:使⽤容器化的技术,docker来解决环境不⼀致的情况
容器化开发流程
在容器化的应⽤中,项⽬架构师和开发⼈员的作⽤贯穿整个开发、测
试、⽣产三个环节。
项⽬伊始,架构师根据项⽬预期创建好需要的基础 base 镜像,nginx、tomcat、mysql镜像或者将 Dockerfile 分发给所有开发⼈员,所有开发⼈员根据 Do ckerfile 创建的容器或者从内部仓库下载的镜像进⾏开发,达到开发环境的充分⼀致。若开发过程中需要添加新的软件,只需要向架构师申请修改基础 bas
e 镜像的 Dockerfile即可。
开发任务结束后,架构师调整 Dockerfile或者Docker 镜像,然后分发给测试部门,测试部门马上就可以进⾏测试,消除了部署困难等难缠的问题。
注意事项
⾸先,在开发和测试环境中,推荐使⽤- v 共享⽂件夹来存储开发⼈员的
程序代码,避免频繁打包操作。
其次,利⽤基础 base 镜像的继承特性来调整镜像的轻微变更。例如当需
要测试程序对不同版本 JDK 的⽀持情况时,只需改变 base 镜像的 JDK 设置,然
后其他依赖它的镜像在重新创建的过程中就可以⾃动完成更新。
最后,测试部门应当注意 Docker 以及镜像的版本,并经常对部署后的应
⽤程序进⾏性能上的测试。
⽣产环境使⽤docker 的问题
如果Docker 出现不可控的风险,是否考虑了备选的解决⽅案;
是否需要对 Docker 容器做资源限制,以及如何限制,如CPU、内存、⽹
络、磁盘等;
⽬前,Docker对容器的安全管理做得不够完善,在应⽤到⽣产环境之前
可以使⽤第三⽅⼯具来加强容器的安全管理。如使⽤ apparmor 对容器的能⼒进⾏限制、使⽤更加严格的 iptable 规则、禁⽌ root ⽤户登录、限制普通⽤户权限以及做好系统⽇志的记录;
容器化流程
基于上⾯提供的内容,我们来尝试搭建⼀下这种⽅案。
每⼀步会单独写⼀个⽂档,来学习和了解这种⽅式
第⼀步:指定基础的dockerfile⽂件,搭建基础镜像。
⽬标:
* 了解dockerfile 的⽂件指令
* 了解如果创建镜像
假设我们的项⽬是spring boot ⼯程,需要连接mysql 和 redis 数据库,假定测试环境是linux 环境,通过 nginx 代理,将请求分发到两个tomcat上,也就是说通过两个tomcat 提供服务,那我们需要创建以下这些镜像⽂件:
jdk+tomcat ⼀个镜像
nginx ⼀个镜像
mysql ⼀个镜像
redis ⼀个镜像
这⾥有⼀个疑问
为什么不把所有服务,都封装成⼀个镜像,这跟我们之前安装服务有区别吗?
将多个应⽤服务解耦到不同容器中,保证了容器的横向扩展和复⽤。
应该保证在⼀个容器中只运⾏⼀个进程。
尽量让每个镜像的⽤途都⽐较集中、单⼀,避免构造⼤
⽽复杂、多功能的镜像;复杂镜像会让后期的维护和修改难以进⾏。
容器应该是短暂的:
通过 Dockerfile 构建的镜像所启动的容器应该尽可能短暂(⽣命周期短)。「短暂」意味着可以停⽌和销毁容器,并且创建⼀个新容器并部署好所需的设置和配置⼯作量应该是极⼩的。如果创建⼀个包含很多服务的镜像,在容器启动和配置⽅⾯是很复杂的。
使⽤docker来配置和启动服务会更加⽅便。
参考:yeasy.gitbooks.io/docker_practice/introduction/why.html
docker打包镜像第⼆步:搭建私有docker register (仓库)
⽬标:
* 了解如何搭建私有docker 仓库
通常公司的环境都是内⽹的,开发⼈员和测试⼈员是连接不上docker hub 的,就算制定好了镜像,发布到 docker hub 上也是pull不下来的。更何况有时候并不想将配置好的镜像发布到公⽹上⾯。
所以,需要搭建私有的docker仓库,将基础镜像上传到私有docker仓库供其他⼈下载使⽤。
第三步:在测试环境 pull 镜像,将容器启动起来,开发⼈员在本地开始开发项⽬。
⽬标:
* 了解容器间的互联和端⼝映射
这⾥会涉及到容器间的互联和宿主机与容器的端⼝映射
第四步:将项⽬提交⾄测试环境运⾏测试,并将测试环境同步到线上环境
⽬标:
* 通过修改基础镜像,将镜像部署到线上环境,运⾏项⽬
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论