我不熟悉配置管理和部署工具。我必须实施一个持续交付/持续部署工具,用于我曾经投入的最有趣的项目之一。Docker和Ansible如何配合实现Continuos Delivery/Continuous Deployment
首先,我个人很喜欢AWS
,我知道Ansible
是什么,它背后的逻辑及其目的。我对Docker
的理解水平并不相同,但我明白了。我经历了很多互联网资源,但我无法得到大局。
我一直在努力的是他们是如何融合在一起的。使用Ansible
,我可以将我的基础架构作为代码进行管理;构建EC2
实例,安装软件包......我甚至可以通过拉取代码,修改配置文件并启动Web服务器来部署完整的应用程序。 Docker
本身就是一个打包应用程序的工具,并确保它可以在您部署它的任何位置运行。
我的问题是:
如何泊坞(或Ansible和码头工人)延长持续集成过程!?
假设我们有一个源代码库,团队成员完成了一个功能的工作,他们推动他们的工作。詹金斯检测到这一点,运行所有的验收/单元/集成测试套件,如果他们都通过了,它会将其声明为稳定版本。 Docker如何适合这里?我的意思是,当团队推动他们的工作时,Jenkins是否必须将应用程序中编码的Docker文件源编译,构建应用程序的映像,启动容器并运行所有测试,或者按照经典方式运行测试一切都很好,那么它会从Docker文件构建Docker镜像并将其保存在一个私人位置? Jenkins应该用x.y.z标记最终图像!
Docker容器配置:
假设我们通过Jenkins
内置图像存储的地方,如何处理部署相同的图像到不同的环境,甚至,不同的配置参数(虚拟主机配置,DB主机,队列URLs,S3端点等)在不破坏Docker
原则的情况下,处理这个问题的最灵活方法是什么?这些配置是否在构建时或者基于它的容器开始时支持在映像中,如果是,它们是如何被注入的?
Ansible和泊坞:
Ansible
提供Docker
模块来管理Docker
容器。假设我解决了上面提到的问题,当我想部署一个新版本的x.t.z我的应用程序时,我告诉Ansible
从存储它的位置拉取该映像,启动应用程序容器,以便如何注入配置设置! Ansible是否必须在运行之前登录Docker镜像(这听起来令人觉得很疯狂),并且以与经典主机相同的方式使用它的Jinja2模板!如果不是,这是如何处理的?!
对不起,如果这是一个很长的问题,或者我拼错了一些东西,但这是我的想法大声。我在过去两周内被封锁,无法找出正确的工作流程。我希望这是未来读者的参考。
请阅读您的经验和解决方案非常有帮助,因为这看起来像一个常见的工作流程。 预先感谢您。任何帮助深表感谢。
Ansible + Docker ==魔法!这里有一篇很棒的博客文章:https://developer.rackspace.com/blog/ansible-and-docker/,另外还有一个专门讨论Ansible + Docker的小节http://www.ansiblefordevops.com/ – Homer6