使用容器化和 Docker 实现 DevOps 的基础知识

2020-09-10 16:14:00
灵雀云
转贴:
kubernetes中文社区
214
摘要:DevOps 在 IT 行业中风靡一时。维基百科中阐述 DevOps 是将软件开发(Dev)和信息技术维护(Ops)结合在一起的一组实践,旨在缩短系统开发生命周期并提供高质量的持续交付。DevOps 普及的主要原因是,它使企业可以比传统软件开发方法更快地开发和改进产品。
DevOps 在 IT 行业中风靡一时。维基百科中阐述 DevOps 是将软件开发(Dev)和信息技术维护(Ops)结合在一起的一组实践,旨在缩短系统开发生命周期并提供高质量的持续交付。DevOps 普及的主要原因是,它使企业可以比传统软件开发方法更快地开发和改进产品。

随着我们工作环境的变化越来越快,对软件开发市场中的快速交付和修复的需求正在上升。因此,对在短时间内生产高质量输出且有限的后期错误需求催生了 DevOps。

你可能感兴趣:Docker 和 DevOps:开发有状态的应用程序并在 Docker 中进行部署

正如我们已经讨论了转变为 DevOps 软件开发方式的重要性一样,我们现在将对话更改为容器化,这是一种易于使用的技术,经常被用来使 DevOps 的实现更流畅、更便捷。容器化是一项使 DevOps 实践更容易遵循的技术。但是容器化到底是什么?让我们一探究竟!

什么是容器化?

容器化是将应用程序及其所需的库、框架和配置文件打包在一起的过程,以便可以在各种计算环境中高效运行它。简单来说,容器化就是应用程序及其所需环境的封装。

近来,它克服了运行虚拟机所带来的挑战,从而获得了广泛的关注。虚拟机模拟主机操作系统内部的整个操作系统,并且需要固定比例的硬件分配才能运行操作系统的所有进程。因此,由于很大的开销,这导致不必要的计算资源浪费。

同时,设置虚拟机需要花费时间,在每个虚拟机中设置特定应用程序的过程也需要时间。这导致仅在设置环境时就花费了大量时间和精力。由开源项目 “Docker” 普及的容器化解决了这些问题,并且通过将所有必需的依赖项与软件一起打包在便携的镜像文件中,从而提高了可移植性。

让我们更深入地研究容器化,它的好处、它的工作原理、选择容器化工具的方式以及它如何胜过虚拟机(VM)的使用。

一些流行的容器提供程序如下:

  • Linux 容器,例如 LXC 和 LCD
  • Docker
  • Windows Server 容器

什么是 Docker?

Docker 已经成为 IT 行业中的一个流行术语。Docker 可以定义为一个开源软件平台,它提供了一种在容器内构建、测试、保护和部署应用程序的简化方法。Docker 鼓励软件开发人员与云、Linux 和 Windows 操作系统进行协作,以轻松、快速地交付服务。

Docker 是提供容器化的平台。它允许将应用程序及其依赖项打包到一个容器中,从而有助于简化开发并加快软件的部署。它消除了在应该测试解决方案的每台机器上复制本地环境的需求,从而帮助实现了输出的最大化,从而节省了宝贵的时间和精力,而这些宝贵的时间和精力将用于进一步的开发。

Dockerfile 可以在工作人员之间快速传输和测试。Docker 还简化了容器镜像管理的过程,并迅速改变了我们大规模开发和测试应用程序的方式。

容器化——实现 DevOps

Docker 已普及了容器化的概念。Docker 容器中的应用程序具有能够在多种操作系统和云环境(例如 Amazon ECS 等)上运行的能力。没有技术或供应商局限。

让我们了解使用容器化实现 DevOps 的需求。

最初,所需的软件开发、测试、部署和监督是分阶段进行的,其中一个阶段的完成将导致另一个阶段的开始。

像 AWS ECS 一样,DevOps 和 Docker 镜像管理技术使软件开发人员可以轻松地进行 IT 运营、共享软件以及彼此协作,并提高生产力。除了鼓励开发人员一起工作之外,他们还成功地消除了以前影响应用程序的不同工作环境之间的冲突。简单来说,容器是动态的,它使 IT 专业人员可以毫无复杂地构建、测试和部署流水线,同时弥合基础架构和操作系统发行版之间的鸿沟,从而形成 DevOps 的文化。

软件开发人员可以通过以下方式从容器中受益:

  • 可以更改容器的环境,以更好地进行生产部署。
  • 快速启动并轻松访问操作系统资源。
  • 与传统系统不同,它们为应用程序提供了足够的空间以适合一台机器。
  • 为 DevOps 提供了敏捷性,可以帮助轻松地在多个框架之间切换。
  • 有助于更有效地运行工作流程。
下面阐明了使用 Docker 成功实现容器化所要遵循的步骤:

  1. 开发人员应确保代码在存储库中,例如 Docker Hub。
  2. 该代码应正确编译。
  3. 确保正确打包。
  4. 确保满足所有插件要求和依赖项。
  5. 使用 Docker 创建容器镜像。
  6. 将其转移到您选择的任何环境。
  7. 为了易于部署,请使用 Rackspace、AWS 和 Azure 等云。

使用容器的好处

许多公司选择容器化来带来各种好处。以下列出了使用容器化技术将享受的优势:

1. DevOps友好
容器化将应用程序及其环境依赖性打包在一起,以确保在一个环境中开发的应用程序可以在另一个环境中工作。这有助于开发人员和测试人员在应用程序上协同工作,这正是 DevOps 文化的全部内容。

2. 多云平台
容器可以在 GCS、Amazon ECS(弹性容器服务)和 Amazon DevOps Server 等多个云平台上运行。

3. 天生便携
容器易于携带。容器镜像可以轻松部署到新系统,然后可以以文件形式共享。

4. 更快的可伸缩性
由于将环境打包到隔离的容器中,因此可以更快地进行伸缩,这对于分布式应用程序非常有帮助。

5. 无需单独的操作系统
在 VM 系统中,裸机服务器的主机操作系统与 VM 不同。相反,在容器中,Docker 镜像可以利用裸机物理服务器的主机 OS 的内核。因此,容器比虚拟机具有更高的工作效率。

6. 资源利用最大化
容器化可以最大程度地利用内存和 CPU 等计算资源,并且所使用的资源比 VM 少得多。

7. 应用程序的快速更新
随着应用程序的快速更新,交付在更少的时间内发生,从而使该平台便于执行更多的系统开发。机器无需重新启动即可更改资源。

借助容器的自动缩放,可以在考虑当前负载的情况下完成 CPU 使用率和机器内存优化。而且与虚拟机的扩展不同,无需重新启动计算机即可修改资源限制。

8. 简化的安全更新
由于容器提供了进程隔离,因此维护应用程序的安全性变得更加方便。

9. 物有所值
就支持单个基础结构上的多个容器而言,容器化是有利的。因此,尽管在工具、CPU、内存和存储上进行了投资,但对于许多企业而言,它仍然是一种经济高效的解决方案。

具有实现容器的完整 DevOps 工作流程可以通过以下方式使软件开发团队受益:

  • 它提供了在每个步骤中自动执行测试以检测错误的功能,因此最终产品中出现缺陷的机会更少。
  • 更快、更方便地交付功能和更改。
  • 该软件的性质比基于 VM 的解决方案更加用户友好。
  • 可靠且多变的环境。
  • 促进团队成员之间的协作和透明度。
  • 本质上具有成本效益。
  • 确保正确利用资源并减少浪费。

容器与虚拟机(VMS)之间的区别

虚拟机可以在主机上运行多个操作系统的多个实例,而不会出现重叠。主机系统允许 Guest OS 作为单个实体运行。Docker 容器不会像虚拟机那样给系统带来太多负担,因为运行OS需要额外的资源,这会降低计算机的效率。

Docker 容器不会给系统增加负担,并且仅使用运行解决方案所需的最少资源,而无需模拟整个操作系统。由于运行 Docker 应用程序所需的资源较少,因此它可以允许大量应用程序在同一硬件上运行,从而降低了成本。

但是,它减少了 VM 提供的隔离。它还增加了同质性,因为如果应用程序在一个系统上的 Docker 上运行,那么它也将在其他系统上的 Docker 上运行而不会出现任何故障。

容器和 VM 都具有虚拟化机制。但是对于容器而言,会进行操作系统的虚拟化。在后者中,进行硬件虚拟化。

VM 性能有限,而带有 Docker 的紧凑型和动态容器则性能更优。

VM 需要更多内存,因此具有更多开销,与 Docker 容器相比,它们的计算量很大。

Docker术语

以下是一些常用的 Docker 术语:

  • 依赖 – 包含形成环境所需的库,框架和软件,可以模拟执行应用程序的介质。
  • 容器镜像 – 一种软件包,提供创建容器所需的所有依赖关系和信息。
  • Docker Hub – 一个公共镜像托管注册表,您可以在其中上传镜像并对其进行处理。
  • Dockerfile – 包含有关如何构建 Docker 镜像的文本说明文件。
  • 仓库 – 一种基于网络或基于 Internet 的服务,用于存储 Docker 镜像,有私有和公共的 Docker 仓库。
  • 注册表 – 一种存储来自多个源的仓库的服务。它可以是公共的也可以是私人的。
  • Docker Compose – 一种工具,可帮助定义和运行多个容器 Docker 应用程序。
  • Docker Swarm – 为运行 Docker 而创建的机器集群。
  • Azure 容器注册表 – 用于存储 Docker 镜像的注册表提供程序
  • Orchestrator – 一种有助于简化集群和 Docker 主机管理的工具。
  • Docker 社区版(CE) – 为 Linux 和 Windows 容器提供开发环境的工具。
  • Docker 企业版(EE) – 用于 Linux 和 Windows 开发的另一套工具。

Docker 容器、镜像和注册表

使用 Docker 创建服务,然后将其打包到容器镜像中。Docker 镜像是服务及其依赖关系的虚拟表示。

该镜像的实例用于创建一个容器,使其在 Docker 主机上运行。然后将镜像存储在注册表中。需要一个注册表才能部署到生产协调器。Docker Hub 用于在框架级别将其存储在其公共注册表中。然后将镜像及其依赖项部署到自己选择的环境中。重要的是要注意,有些公司还提供私人注册表。

商业组织还可以创建自己的私有注册表来存储 Docker 镜像。如果镜像是机密的,并且组织希望镜像与部署镜像的环境之间的延迟有限,则可以提供私人注册表。

Docker 如何执行容器化?

Docker 镜像容器或应用程序可以在 Windows 和 Linux 上本地运行。只需通过 Docker 引擎直接与操作系统交互,即可利用系统资源来实现。

为了管理集群和组合,Docker 提供了 Docker Compose,它有助于运行多个容器应用程序而不会彼此重叠。开发人员还可以通过 Docker Swarm 模式将所有 Docker 主机连接到单个虚拟主机。之后,使用 Docker Swarm 将应用程序扩展到多个主机。

多亏了 Docker 容器,开发人员可以访问容器的组件,例如应用程序和依赖项。开发人员还拥有该应用程序的框架。单个平台上并相互依赖的多个容器称为“部署清单”。但是,与此同时,专业人员可以更加注意选择合适的环境进行部署,扩展和监视。Docker 有助于限制错误的机会,错误的机会可能在应用程序传输期间发生。

本地部署完成后,它们将进一步发送到 Git 存储库之类的代码存储库。代码存储库中的 Dockerfile 用于构建持续集成(CI)流水线,以提取基础容器映像并构建 Docker 镜像。

在 DevOps 机制中,开发人员致力于将文件传输到多个环境,而管理专业人员则负责管理环境以检查缺陷并将反馈发送给开发人员。

面向未来的容器化战略

预测未来并根据项目需求做好可伸缩性的准备总是一个好主意。随着时间的流逝,项目变得越来越复杂,因此有必要实施大规模的自动化并提供更快的交付。

密集且复杂的容器化环境需要适当的处理。在这种情况下,软件开发人员可以采用 PaaS 解决方案,以将更多精力放在编码上。选择最方便的平台以提供更好和先进的服务时,有多种选择。因此,根据组织的应用程序确定正确的平台非常麻烦。

为了方便您,我们在选择最佳的容器化平台之前已经列出了一些要考虑的参数:

1. 灵活自然
为了获得平稳的性能,重要的是手动拾取一个平台,该平台可以根据需求的性质轻松地进行调整或更改,并且可以自动进行。

2. 锁定级别
实际上,PaaS 解决方案供应商通常是专有的,因此倾向于将您锁定在一个基础架构中。

3. 创新空间
选择一个平台,该平台应具有广泛的内置工具以及第三方集成技术,以鼓励开发人员为进一步的创新让路。

4. 云支持选项
在选择正确的平台时,至关重要的是找到一个支持私有,公共和混合云部署的平台,以应对新变化。

5. 定价模型
由于选择支持长期承诺的集装箱化平台是很自然的,因此了解提供哪种定价模式非常重要。有很多平台可以在不同的运营规模上提供不同的定价模型。

6. 时间和精力
要记住的另一个关键方面是容器化不是一蹴而就的。专业人士需要花费时间来重组架构基础架构。应该鼓励他们运行微服务。

为了从传统结构转变,需要将大型应用程序分解为较小的部分,再将这些部分进一步分布到多个连接的容器中。因此,建议聘请专家,他们会尽一切努力找到一种方便的解决方案来在单个平台上处理虚拟机和容器,因为使组织完全依赖于容器需要时间。

7. 兼容旧版应用程序
当涉及现代化时,不应忽略旧式 IT 应用程序。在容器化的帮助下,IT 专业人员可以利用这些经典应用程序的收益,以适当地利用对旧框架的投资。

8. 多应用程序管理
通过在容器平台上运行多个应用程序来充分利用容器化。以最低的成本投资新应用程序,并通过使其对当前和旧版应用程序友好而对每个平台进行修改。

9. 安全性
由于容器化环境具有比传统环境更快的更改能力,因此它具有一些主要的安全风险。敏捷性可以通过提供快速访问来使开发人员受益。但是,如果不能确保所需的安全级别,它将失败。

处理容器时遇到的一个主要问题是,处理由第三方或不受信任的来源打包的容器模板可能会带来很大的风险。因此,最好在使用之前验证公开可用的模板。

组织需要增强和集成其安全流程,以无忧地开发和交付应用程序和服务。随着平台和应用程序的现代化,安全性应成为企业的首要任务。

结论

为了与瞬息万变的 IT 行业保持同步,专业人员应该不断追求更好,因此,应利用市场上可用的新工具来增强安全性。

这标志着第2部分的结论!在第3部分中,我们将讨论关键的 DevOps 工具和 DevOps 的实现策略。



本文转自公众号 jenkins中文社区

作者 Mitul Makadia
发表评论
玖 乘 零 =
评论通过审核后显示。
文章分类
联系我们
联系人: 王春生
Email: chunsheng@cnezsoft.com