使用Docker做开发的建议团队工作流

意义

自从Docker进入到我们的工作流程之后给环境配置框架搭建,持续集成,持续交付方面带来了很多好处,首先相对于虚拟机来说,最直接的好处是带来了更小的镜像,同时程序以容器的方式运行不但启动速度快而且性能也好过虚拟机,同时它的配置可以非常快速的调整。其次对于开发来说,我们整个团队都使用的是Sublime+git的方式进行开发,使用Docker之后无论是什么平台只要有Shell都可以很方便的统一测试&开发环境。

Docker特性的使用

  1. 磁盘挂载(-v)
    一直以来我们在使用Docker过程中都遵循着一个道理Docker只是一个环境他只是运行程序的一种手段。我们不能在docker中持久化数据,无论是文件还是数据库都是不允许的,因为很有可能测试结束之后会丢失数据。用于开发的Docker Image我们需要针对数据持久化新开方便调试使用的数据库,我们需要挂载针对应用的数据库持久化文件夹,当然我们还需要针对脚本进行目录挂载,如果是golang的话运行之前可能要自动化构建golang程序。
  2. 端口映射
    虽然docker给我们提供了link的方法来实现容器之间的链接,但是我们依赖还是使用了最传统的端口映射的方式来进行服务的对外发布。因为我们觉得关系越简单,整个平台的服务就越稳定,虽然链接的这种方式并没有什么不好之处。

工作流程

定制容器准备开发&&运行环境

从Dockerfile开始部署环境,有两个方向上的选择,一种是自己定制操作系统,另外一种是依赖其他人做好的。

先说第一种方法:在我之前的blog中已经有提到,可以大概参考一下。

这种方法缺点主要在于,需要非常了解Linux或者至少做过LFS才能方便自己定制操作系统,要对业务底层依赖有一定了解。因为此方法需要精简image所以需要手动解决依赖问题。对于依赖比较多的情况不适用。

第二种方法,在之前的blog中也有提到过,有详细的过程以及Dockerfile参考。

这种方法构建的image大概100MB+虽然比虚拟机(按G来算)小了很多,但是在迁移分发Image的时候还是要注意(如果你没有自己的Docker Hub)。如果使用文件迁移请用save的方式来分发image,在上面链接的blog中有提到备份迁移的问题。

另外一个注意的地方,如果是用别人的image要注意安全,会不会里面挂了后门之类的,然后要摸清系统配置,准备好代码或可执行二进制文件的挂载位置,数据库持久化文件存放的位置等等都要摸清。最后在运行的时候都要给出挂载方案。

发布之后要做的事

因为Docker只是一个容器而不是项目中的一部分,所以只是项目实现的一种手段,具体应该如何使用它,需要一定的文档支撑,也就是开发业务流程文档。

文档中要详细的提出所有依赖的Service配置文件的位置,配置的状态,持久化目录位置,输出的端口,开发完成之后业务部署的位置这些关于项目的尽量能想到的信息,因为这套容器会跟着项目整个周期中作为基础设施的一部分在运行。

除了配置方面,第二部分是建议的使用方法流程,比如:要说清楚代码是在容器内部编译还是在其他容器中有做好的辅助工具编译,还是有一个独立的服务器(项目比较大的时候需要一个独立的构建服务器,甚至需要一个专门管理构建&&版本的同事),如果是脚本语言写的就不需要这么麻烦了。

项目发布

项目进行到一个阶段之后需要发布,把代码或可执行二进制文件直接构建到image里面就行了。注意先要判断项目是否要使用Docker。

好处总结

在文件持久化方面我们挂载的目录实现了统一,配置文件也实现了统一。

在PHP开发中再也不用担心目录大小写敏感,文件大小写敏感,目录长度限制等因为操作系统不统一的问题。

由于不同项目有不同的限制因素,因此在这里介绍总体的工作流程,项目中涉及到不同的应用服务只需要比较小的调整。

原文发布时间为:2015-06-09

时间: 2024-08-01 12:50:57

使用Docker做开发的建议团队工作流的相关文章

指导建议-有关openwrt做开发的提问。如果您了解openwrt,希望您能给出一些建议,谢谢啦

问题描述 有关openwrt做开发的提问.如果您了解openwrt,希望您能给出一些建议,谢谢啦 我最近一直在学习openwrt,我希望能够为openwrt自己创建一个软件包(可能会涉及到如何构建目录,以及目录下应有的文件),但是我现在不知道如何下手,网上也没有搜到合适的资料(http://www.right.com.cn/forum/thread-75653-1-1.html这篇文章挺好,但是这些资料来自于什么文档呢?想找到来源,并仔细学习一下),在https://openwrt.org/上也

开发者可以使用Docker做什么?

本文讲的是开发者可以使用Docker做什么?,[编者的话]有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例. Docker 如今赢得了许多关注,很多人觉得盛名之下其实难副,因为他们仍然搞不清 Docker 和普通开发者到底有什么关系.许多开发者觉得 Docker 离自己很远,Docker 是生产环境中的工具,和自己无关.我也是花了很长时间才想清楚作为普通开发人员如何在自己的开发中使用 D

用Docker创建开发环境

本文讲的是用Docker创建开发环境,[编者的话]鉴于还没有用Docker创建本地开发环境的先例,Jeff Nickoloff开创了一个先例,相信大家也可以. 译者解释用Docker创建开发环境:作者在此处使用了Frankenstein一词.Frankenstein,<弗兰肯斯坦>原是英国诗人雪莱的妻子玛丽·雪莱在1818年创作的小说,被认为是世界第一部真正意义上的科幻小说.弗兰肯斯坦来自于此小说,可以理解为怪人;毁灭创造者自己之物 知道一个事物和实现这个事物是完全不同的事情.从Docker诞

DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践

本文讲的是DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践[编者的话]Docker的出现,为更简便.更细粒度地对云资源的调控提供了一个强有力的支撑,WeX5开发者云基于Rancher+Docker,在如何提高物理资源利用率的课题上做了一些探索和研究,在保障用户体验良好的前提下,大大提高了物理资源的利用率,有效地降低了运营成本. 一般情况下,开发者从无到有开发一个可用于公网访问的HTML5的App应用的流程是这样的:配置开发环境.开发应用.本地调试.租用公网服务器.注

十个有关Docker让开发人员失去热情的神话

本文讲的是十个有关Docker让开发人员失去热情的神话[编者的话]近年来Docker及其生态系统日益完善,但是尽管如此,围绕着Docker本身还是有一些神话或者说是误解来阻碍开发人员使用Docker的热情的,本文列出了十个有关Docker的神话,并且探讨了各自的解决方案. 最近在一次谈话中发生了一件奇怪的事情. 我在讨论Docker的发展,但是会不停地听到一些不太对劲的信息."Docker本质上是更加企业级的" "Docker只能暂时性地工作在OS X中,几乎不能在Windo

生产环境中使用Docker Swarm的一些建议

本文讲的是生产环境中使用Docker Swarm的一些建议[编者的话]实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes,Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它们之中,Swarm是Docker原生的,同时也是最简单,最易学,最节省资源的,至少值得我们多了解一下.本文将介绍一些非常实用的建议. [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述.架构.日志和监控,部

基于Docker的开发模式驱动持续集成落地实施

11月30日,资深质量优化专家陈能技老师,在[DBA+社群]中间件用户组进行了一次主题为"基于Docker的开发模式驱动持续集成落地实施"的线上分享.小编特别整理出其中精华内容,供大家学习交流.同时,也非常感谢陈能技老师对DBA+社群给予的大力支持.    嘉宾简介   资深质量优化专家,12年软件测试与质量管理经验 <软件性能测试诊断分析与优化>等多本IT畅销书作者 演讲实录   今天主要交流的主题是基于Docker的开发模式如何驱动持续集成落地实施,这里会涉及两个主要的

DockOne微信分享(八十五):Docker存储方式选型建议

本文讲的是DockOne微信分享(八十五):Docker存储方式选型建议[编者的话]Docker存储方式提供管理分层镜像和容器的可读写层的具体实现.最初Docker仅能在支持AUFS文件系统的Ubuntu 发行版上运行,但是由于AUFS未能加入Linux内核,为了寻求兼容性.扩展性,Docker在内部通过GraphDriver机制这种可扩展的 方式来实现对不同文件系统的支持.本次分享通过一次客户实施案例深入的看看Docker的几种存储方式,并给出一些技术选型的建议. Docker存储方式: AU

大家认为毕业出来是先做开发好还是先做测试好

问题描述 问题如上 解决方案 解决方案二:一般先做开发如果觉得辛苦可以转测试.但是从测试转开发就比较辛苦了解决方案三:开发吧,全面点.解决方案四:做测试很难转开发解决方案五:还得努力解决方案六:个人倾向于先做开发,但是还是看兴趣吧,要是喜欢测试,一直做测试也挺好解决方案七:引用3楼ticmy的回复: 做测试很难转开发 同意,开发转测试比较容易,个人感觉解决方案八:我是应届生..还没有做过开发.但是感觉要想做好测试的话,必须要先做开发,是不是这样的啊??解决方案九:引用6楼java1109的回复: