从持续集成到持续交付——Docker Cloud 概览
zmkl1000
8年前
<p>本文介绍了Docker Cloud的概况,以及如何使用Docker Cloud改进我们的持续集成和持续发布的流程。也指出了目前Docker Cloud还存在的功能方面的问题。</p> <p>容器化(Docker容器),持续集成(CI),持续部署或持续交付(CD)是简化DevOps工作的终极方案。这展示了一个未来的场景:当代码被提交到代码库之后,所有的后续工作包括编译、配置、交付和部署,甚至是高可用性都是完全标准化和自动化的。从这个角度我们可以看到一个美好的未来,将开发人员和运维人员从繁复的工作中解放出来,节省出来的人力资源可以更专注在更加创造性的开发工作。</p> <h2><strong>官方的Docker镜像仓库和CI服务</strong></h2> <p>从Docker的第一版本发布以来,这个公司持续行进在一个正确的方向上前进,虽然前进的有点慢。尽管如此,在Docker收购Tutum一年之后,Docker最终发布了正式的云服务Docker Cloud(cloud.docker.com)。现在围绕Docker的生态系统已经接近完备了。</p> <p>在深入到Docker Cloud的技术细节之前,让我们看一下Docker的镜像仓库和自动构建服务——Docker Hub(hub.docker.com)。作为我使用了将近一年的CI工具,我觉得它还是非常好用的。它的工作方式也是很简单的,你只需要写好一个Dockefile并把它放在GitHub或者Bitbucket上,Docker Hub就会在每次代码提交之后自动构建Docker镜像并将其放置到Docker Hub镜像仓库上提供下载。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/07d9e48589c1f5732f16f214c1a18de1.png"></p> <p>例如,https://hub.docker.com/r/tomasen/frontd/builds/ 就是这样一个在Docker Hub上自动构建的Docker镜像。我可以指定镜像的分支并分配不同的标签。这个流程有助于区分版本,使其更适用于开发或者生产环境。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/d12c6bd1a5923a31462324e495caa4fe.jpg"></p> <p>当然,这个构建过程会在每次代码提交时被执行。</p> <h2><strong>Docker Cloud!</strong></h2> <p>2016年3月,Docker发布了Docker Cloud的第一个版本。现在,在Docker Cloud上,我们可以添加我们数据中心或者AWS中的服务器添加到Docker Cloud中让Docker Cloud来控制它。因此无论是AWS或者Google或者Linode的虚机,甚至是裸机都可以通过一个简单的shell脚本命令将其添加到Docker Cloud中,这个shell脚本会在服务器中安装一个代理程序并将服务器转给Docker Cloud。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/5c844d86e95761b2237aac5d097566c4.jpg"></p> <p>Docker Cloud跟传统的云服务提供商的主要区别是Docker Cloud本身不提供任何的服务器或者虚机,只是提供某种服务器/服务的管理系统。因此Docker公司可以通过提供持续部署的方案来产生利润。</p> <p>将服务器添加到Docker Cloud的命令是非常简单的,如下所示:</p> <pre> curl -Ls https://get.cloud.docker.com/ | sudo -H sh -s <token></pre> <p>这个脚本安装和配置Docker守护进程并设置这个节点到Docker Cloud的通信隧道,因此Docker Cloud就可以管理这个节点上的服务了。</p> <p>当这些节点配置完成后,我们就可以添加服务了,这意味着我们可以利用策略来部署Docker镜像到节点上运行。</p> <p>如果Docker镜像是来自我们前面提到的Docker Hub,整个设置过程就会非常容易了。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/b19818de7774e501df546d52011f275d.jpg"></p> <p>从用户界面上,我们可以设置部署策略是到所有节点,到最空闲的节点或者高可用。</p> <p>除了最基本的端口发布、网络和存储配置功能外,Docker Cloud提供了高级的概念例如Stack和服务关联,这使得平台越来越成熟和完备。</p> <h2><strong>未完待续</strong></h2> <p>Docker Cloud依然还有一些问题可以被修复,以使得其持续交付服务能变得完美:</p> <ul> <li> <p>缺少服务监控,或者测试驱动部署策略。</p> </li> <li> <p>缺少对持久存储的管理。</p> </li> <li> <p>在每个Docker Cloud节点上都需要安装高权限的代理程序,在企业环境中将会造成严重的安全问题。</p> </li> </ul> <h2><strong>未来</strong></h2> <p>每次我都在思考彻底摆脱命令行终端和ssh,只需要简单的将代码提交到某个分支,然后服务就会被部署到合适的服务器上去。在任何时候都会有一个进程去去监控并在合适的时候重新部署或者弹性扩展。这样将会极大的提高迭代的速度和效率,还有一个好处是我们将无需再担心运维人员可能会犯的错误。想到这里,我是非常兴奋的。</p> <p> </p> <p> </p> <p> </p> <p style="text-align:center"> </p> <p>来自:https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=2649691641&idx=1&sn=55c2c70c327bdaaa7b6defb06f677281&chksm=88932a9abfe4a38cfe9d05f25c51c6ef852d13482ac2d00066be56274e2184a1dc8f86043702&scene=1&srcid=0914SVvAhCRNjabHepSDdx4S&pass_ticket=20a9aKqTE9fcvL5SLFFZjeaHGVEdrb%2FNV%2FCqMuFATdM%3D#rd</p> <p> </p>