DevOps 与 Docker
DevOps vs Docker
我想知道 docker 究竟如何适合 CI /CD 。
我了解到在容器的帮助下,您可能会专注于代码,而不是 dependencies/environment。但是一旦你签入你的代码,你会期望像 TeamCity,Jenkins 或 Bamboo 这样的工具来处理集成构建,集成 test/unit 测试和部署到目标服务器(批准后),你会期望相同 Docker 容器图像到 运行 构建代码。
然而,在以上所有内容中, Docker 不在 CI/CD 循环中,尽管它在服务器上执行时发挥作用。那么,为什么我看到文章将其列为 DevOps 的内容之一。
我可能是错的,因为我不是 DevOps 大师,请指教!
Docker 促进了 "configuration as code" 的概念。我可以编写一个 Docker 文件来指定具有我需要的所有框架的特定基础映像,以及签入我的存储库的自定义配置文件。然后我可以使用 Docker 文件构建该映像,将其推送到我的 docker 注册表,然后告诉我的目标主机提取最新映像,然后 运行 该映像。我可以使用只安装 Linux 的目标主机自动执行所有这些操作。
这是一个简单的场景,说明了 Docker 如何为 CI/CD 做出贡献。
Docker 对于构建您的应用程序也很有用。如果您有多个具有不同依赖项的应用程序,您可以通过在具有必要依赖项的 docker 容器中构建所有内容来避免在 CI 计算机上出现大量依赖项和冲突。如果您将来需要扩展,您只需要另一台机器 运行 您的 CI 工具(如 jenkins slave),以及安装 docker.
在使用微服务时,这一点非常重要。一个应用程序可以依赖旧版本的框架,而另一个应用程序需要新版本。使用容器没问题。
Docker 只是 DevOps 工程师、DevOps 从业者或任何你想称呼他们的人可用的另一个工具。 Docker 所做的是将代码和代码依赖项封装在单个单元(容器)中,该单元可以 运行 安装 Docker 引擎的任何地方。为什么这有用?出于多种原因;但就 CI/CD 而言,它可以帮助工程师将配置与代码分开,减少花费在依赖管理等方面的时间,可以使用它进行扩展(当然在其他一些工具的帮助下)。清单还在继续。
例如:如果我有一个代码存储库,在我的构建脚本中,我可以引入特定于环境的依赖项来创建一个在每个环境中功能行为相同的容器,因为我是从相同的源存储库构建的, 但它可以包含一组特定于环境的证书和配置文件等。
另一个例子:如果你有多个构建服务器,你可以创建一堆实用程序 Docker 容器,它们可以在你的 CI/CD 管道中使用,通过下拉容器来执行特定操作在舞台上做某事。对构建服务器的唯一依赖现在变成了 Docker 引擎。您可以独立于另一个实用程序容器执行的任何其他操作来更改、添加、修改这些实用程序容器。
综上所述,在 CI/CD 管道中利用 Docker 确实可以做很多事情。我认为了解 Docker 是什么以及 Docker 可以做什么比 "how to use Docker in your CI/CD" 指南更重要。虽然有一些常见的模式,但这都归结为您要解决的问题,并且某些模式可能不适用于特定的用例。
Docker 消除了众所周知的地狱矩阵问题,使环境与其容器技术无关。一个开源项目 Docker 通过简化容器工作流程改变了游戏规则,这让人们对在软件交付生命周期的所有阶段(从开发到生产)使用容器感到兴奋。
它不仅仅是关于容器,它还涉及构建 Docker 图像、管理您的图像和对任何 Docker 注册表的依赖、部署到编排平台等,所有这些都在 CI/CD过程。
Docker 是 DevOps 推动者,而不是 DevOps 本身:使用 Docker,开发人员可以轻松支持新的开发、增强和生产支持任务。 Docker 容器定义了所用软件的确切版本,这意味着我们可以将开发人员的环境与需要服务或增强的应用程序分离。
没有普遍自动化,Docker 对你没有多大帮助:你无法用糟糕的代码实现 DevOps。您必须首先通过自动化所有开发人员代码交付任务来确保交付的代码具有最高质量,例如单元测试、集成测试、自动验收测试 (AAT)、静态代码分析、代码审查签核和拉取请求工作流,和安全分析。
如果没有虚拟化专业知识,跨越到 Docker 是行不通的:跨越式作为 IT 策略很少奏效。新技术往往会带来对现有技术的抽象。诚然,这样的抽象提高了生产力,但它们不是跳过我们必须了解一项技术如何工作的部分的借口。
Docker 是所有计算平台上的第一个 Class 公民:现在正是赶上 Docker 潮流的好时机。 Docker 有史以来第一次在世界上所有主要计算平台上得到支持。有两种服务器:Linux 服务器和 Windows 服务器。从第一天起就存在对 Linux 的原生 Docker 支持,从那时起,Linux 支持已经优化到可以访问小型文件的程度。
敏捷是实现 DevOps 的必要条件:DevOps 是实现敏捷的必要条件。敏捷的要点是在没有 DevOps 的情况下以迭代方式向所有利益相关者添加和展示价值,您可能无法及时向利益相关者展示您正在添加的价值。那么为什么敏捷也是实现 DevOps 的必备条件呢?创建持续改进流需要很多纪律,像 Scrum 这样的敏捷框架定义了团队开始迭代交付所必须具备的基本素质。
Docker 通过容器化我们的应用程序,为您的组织节省资本和资源浪费。单个主机上的容器彼此隔离,并且您使用相同的 OS 资源。这可以释放 RAM、CPU 和存储空间等。Docker 可以轻松地将我们的应用程序与所有必需的依赖项一起打包到一个映像中。对于大多数应用程序,我们都有现成的基础映像。也可以创建自定义的基本图像。我们通过编写简单的 Docker 文件来构建我们自己的自定义图像。我们可以将此映像发送到中央注册表,从那里我们可以将其 PULL 部署到 QA、STAGE 和 PROD 等各种环境中。这所有这些活动都可以通过 Jenkins 等 CI 工具自动化。
在 CI/CD 管道中,您可以期待 Docker 在构建准备就绪时出现。最初 CI 服务器 (Jenkins) 将在构建应用程序的临时工作区中从 SCM 检出代码。准备好构建工件后,您可以将其打包为具有依赖项的图像。 Jenkins 通过执行简单的 docker 构建命令来做到这一点。
DevOps 是一种文化、方法论或程序,可以使我们的开发速度非常快。 Docker 是我们 devops 文化中将应用程序部署为容器技术的工具之一(使用更少的资源来部署我们的应用程序)。
Docker只是将devloper环境打包到运行在其他系统上,这样开发者就不用担心由于环境和操作的差异,代码是否在该系统上工作而不能在生产中工作系统。
它只是使代码可移植到其他环境。
我想知道 docker 究竟如何适合 CI /CD 。 我了解到在容器的帮助下,您可能会专注于代码,而不是 dependencies/environment。但是一旦你签入你的代码,你会期望像 TeamCity,Jenkins 或 Bamboo 这样的工具来处理集成构建,集成 test/unit 测试和部署到目标服务器(批准后),你会期望相同 Docker 容器图像到 运行 构建代码。 然而,在以上所有内容中, Docker 不在 CI/CD 循环中,尽管它在服务器上执行时发挥作用。那么,为什么我看到文章将其列为 DevOps 的内容之一。 我可能是错的,因为我不是 DevOps 大师,请指教!
Docker 促进了 "configuration as code" 的概念。我可以编写一个 Docker 文件来指定具有我需要的所有框架的特定基础映像,以及签入我的存储库的自定义配置文件。然后我可以使用 Docker 文件构建该映像,将其推送到我的 docker 注册表,然后告诉我的目标主机提取最新映像,然后 运行 该映像。我可以使用只安装 Linux 的目标主机自动执行所有这些操作。
这是一个简单的场景,说明了 Docker 如何为 CI/CD 做出贡献。
Docker 对于构建您的应用程序也很有用。如果您有多个具有不同依赖项的应用程序,您可以通过在具有必要依赖项的 docker 容器中构建所有内容来避免在 CI 计算机上出现大量依赖项和冲突。如果您将来需要扩展,您只需要另一台机器 运行 您的 CI 工具(如 jenkins slave),以及安装 docker.
在使用微服务时,这一点非常重要。一个应用程序可以依赖旧版本的框架,而另一个应用程序需要新版本。使用容器没问题。
Docker 只是 DevOps 工程师、DevOps 从业者或任何你想称呼他们的人可用的另一个工具。 Docker 所做的是将代码和代码依赖项封装在单个单元(容器)中,该单元可以 运行 安装 Docker 引擎的任何地方。为什么这有用?出于多种原因;但就 CI/CD 而言,它可以帮助工程师将配置与代码分开,减少花费在依赖管理等方面的时间,可以使用它进行扩展(当然在其他一些工具的帮助下)。清单还在继续。
例如:如果我有一个代码存储库,在我的构建脚本中,我可以引入特定于环境的依赖项来创建一个在每个环境中功能行为相同的容器,因为我是从相同的源存储库构建的, 但它可以包含一组特定于环境的证书和配置文件等。
另一个例子:如果你有多个构建服务器,你可以创建一堆实用程序 Docker 容器,它们可以在你的 CI/CD 管道中使用,通过下拉容器来执行特定操作在舞台上做某事。对构建服务器的唯一依赖现在变成了 Docker 引擎。您可以独立于另一个实用程序容器执行的任何其他操作来更改、添加、修改这些实用程序容器。
综上所述,在 CI/CD 管道中利用 Docker 确实可以做很多事情。我认为了解 Docker 是什么以及 Docker 可以做什么比 "how to use Docker in your CI/CD" 指南更重要。虽然有一些常见的模式,但这都归结为您要解决的问题,并且某些模式可能不适用于特定的用例。
Docker 消除了众所周知的地狱矩阵问题,使环境与其容器技术无关。一个开源项目 Docker 通过简化容器工作流程改变了游戏规则,这让人们对在软件交付生命周期的所有阶段(从开发到生产)使用容器感到兴奋。
它不仅仅是关于容器,它还涉及构建 Docker 图像、管理您的图像和对任何 Docker 注册表的依赖、部署到编排平台等,所有这些都在 CI/CD过程。
Docker 是 DevOps 推动者,而不是 DevOps 本身:使用 Docker,开发人员可以轻松支持新的开发、增强和生产支持任务。 Docker 容器定义了所用软件的确切版本,这意味着我们可以将开发人员的环境与需要服务或增强的应用程序分离。 没有普遍自动化,Docker 对你没有多大帮助:你无法用糟糕的代码实现 DevOps。您必须首先通过自动化所有开发人员代码交付任务来确保交付的代码具有最高质量,例如单元测试、集成测试、自动验收测试 (AAT)、静态代码分析、代码审查签核和拉取请求工作流,和安全分析。 如果没有虚拟化专业知识,跨越到 Docker 是行不通的:跨越式作为 IT 策略很少奏效。新技术往往会带来对现有技术的抽象。诚然,这样的抽象提高了生产力,但它们不是跳过我们必须了解一项技术如何工作的部分的借口。 Docker 是所有计算平台上的第一个 Class 公民:现在正是赶上 Docker 潮流的好时机。 Docker 有史以来第一次在世界上所有主要计算平台上得到支持。有两种服务器:Linux 服务器和 Windows 服务器。从第一天起就存在对 Linux 的原生 Docker 支持,从那时起,Linux 支持已经优化到可以访问小型文件的程度。 敏捷是实现 DevOps 的必要条件:DevOps 是实现敏捷的必要条件。敏捷的要点是在没有 DevOps 的情况下以迭代方式向所有利益相关者添加和展示价值,您可能无法及时向利益相关者展示您正在添加的价值。那么为什么敏捷也是实现 DevOps 的必备条件呢?创建持续改进流需要很多纪律,像 Scrum 这样的敏捷框架定义了团队开始迭代交付所必须具备的基本素质。
Docker 通过容器化我们的应用程序,为您的组织节省资本和资源浪费。单个主机上的容器彼此隔离,并且您使用相同的 OS 资源。这可以释放 RAM、CPU 和存储空间等。Docker 可以轻松地将我们的应用程序与所有必需的依赖项一起打包到一个映像中。对于大多数应用程序,我们都有现成的基础映像。也可以创建自定义的基本图像。我们通过编写简单的 Docker 文件来构建我们自己的自定义图像。我们可以将此映像发送到中央注册表,从那里我们可以将其 PULL 部署到 QA、STAGE 和 PROD 等各种环境中。这所有这些活动都可以通过 Jenkins 等 CI 工具自动化。 在 CI/CD 管道中,您可以期待 Docker 在构建准备就绪时出现。最初 CI 服务器 (Jenkins) 将在构建应用程序的临时工作区中从 SCM 检出代码。准备好构建工件后,您可以将其打包为具有依赖项的图像。 Jenkins 通过执行简单的 docker 构建命令来做到这一点。
DevOps 是一种文化、方法论或程序,可以使我们的开发速度非常快。 Docker 是我们 devops 文化中将应用程序部署为容器技术的工具之一(使用更少的资源来部署我们的应用程序)。
Docker只是将devloper环境打包到运行在其他系统上,这样开发者就不用担心由于环境和操作的差异,代码是否在该系统上工作而不能在生产中工作系统。 它只是使代码可移植到其他环境。