DevOps vs Docker

我想知道docker如何适合CI / CD。 我明白,在容器的帮助下,您可能会关注代码,而不是依赖关系/环境。 但是一旦你签入代码,你将会期待像TeamCity,Jenkins或者Bamboo这样的工具来处理集成构build,集成testing/unit testing以及部署到目标服务器(在批准之后),在那里你会期望同样的Docker容器映像运行内置的代码。 但是,总而言之,Docker在CI / CD周期中并不存在,尽pipe它在服务器执行时发挥作用。 那么,为什么我会看到文章将其列为DevOps的其中一项。 我可能是错的,因为我不是DevOps大师,请指教!

Docker只是DevOps Engineers,DevOps从业者或其他任何您想调用它们的工具。 Docker所做的是将代码和代码依赖关系封装在一个单元(一个容器)中,该单元可以在Docker引擎安装的任何地方运行。 为什么这是有用的? 由于多种原因, 但就CI / CD而言,它可以帮助工程师从代码中分离出configuration,减less进行依赖pipe理所花费的时间等,可以用它来扩展(当然还有其他一些工具的帮助)。 名单继续。

例如:如果我有一个单独的代码库,在我的构build脚本中,我可以引入特定于环境的依赖关系来创build一个在每个环境中function相同的Container,就像我从同一个源代码库构build的一样,但是它可以包含一组环境特定的证书和configuration文件等

另一个例子:如果你有多个构build服务器,你可以创build一堆可以在你的CI / CDpipe道中使用的实用的Docker容器,通过在一个阶段下拉一个容器做一些事情来完成某个操作。 现在,您的构build服务器上唯一的依赖关系成为Docker引擎。 而且,您可以独立于另一个实用程序容器执行的任何其他操作来更改,添加,修改这些实用程序容器。

说完所有这些,在CI / CDpipe道中使用Docker确实有很多好处。 我认为理解Docker是什么,Docker可以做什么更重要的是“如何在CI / CD中使用Docker”指南。 虽然这里有一些常见的模式,但是这一切都归结为您正在尝试解决的问题,某些模式可能不适用于某个用例。

Docker简化了“configuration为代码”的概念。 我可以编写一个Dockerfile来指定一个特定的基础镜像,它包含我需要的所有框架,以及签入到我的仓库中的自定义configuration文件。 然后,我可以使用Dockerfile生成该映像,将其推送到我的泊坞窗registry,然后告诉我的目标主机拉取最新的映像,然后运行映像。 我可以自动完成所有这些工作,使用目标主机上只安装了Linux的目标主机。

这是一个简单的场景,说明了Docker如何为CI / CD做出贡献。

Docker对构build应用程序也很有用。 如果有多个具有不同依赖关系的应用程序,则可以通过在具有必要依赖关系的docker容器中构build所有内容来避免CI计算机上存在大量依赖关系和冲突。 如果你需要在将来扩展你所需要的是运行你的CI工具的另一台机器(如jenkins slave),并且安装一个docker。

当使用微服务时,这是非常重要的。 一个应用程序可以依赖旧版本的框架,而另一个需要新版本。 用容器这不是问题。

Docker从地狱问题中删除了我们都知道的matrix,使得环境独立于其容器技术。 一个开源项目Docker通过简化容器工作stream程改变了游戏,这导致了在软件交付生命周期的所有阶段,从开发到生产,都使用容器的兴奋。

它不仅仅是关于容器,它涉及到构buildDocker镜像,pipe理你的镜像和依赖于任何Dockerregistry,部署到编排平台等等,而这一切都在CI / CD过程之中。