什么是 Docker?

Docker 是 Moby 项目的一个子集,是一个用于在服务器和云端构建、运行和管理容器的软件框架。“Docker”一词可以指工具(命令和守护进程)或 Dockerfile 文件格式。

过去,当你想运行一个 Web 应用程序时,你需要购买一台服务器,安装 Linux,设置 LAMP 堆栈,然后运行应用程序。如果你的应用程序变得流行,你还需要通过设置第二台服务器来实践良好的 负载均衡,以确保应用程序不会因流量过大而崩溃。

然而,时代已经改变,互联网不再专注于单个服务器,而是建立在通常被称为“云”的系统中,由相互依赖和冗余的服务器阵列构成。得益于 Linux 内核命名空间和 cgroups 等创新,服务器的概念可以从硬件的约束中解放出来,本质上变成了一段软件。这些基于软件的服务器被称为 容器,它们是运行它们的 Linux 操作系统与高度本地化的运行时环境(容器的内容)的 混合体

理解容器

容器技术可以被认为是三个不同的类别

  • 构建器:用于构建容器的工具或一系列工具,例如用于 LXC 的 distrobuilder,或用于 Docker 的 Dockerfile。

  • 引擎:用于运行容器的应用程序。对于 Docker,这指的是 docker 命令和 dockerd 守护进程。对于其他引擎,这可以指 containerd 守护进程和相关命令(例如 podman)。

  • 编排:用于管理多个容器的技术,包括 Kubernetes 和 OKD。

容器通常同时交付应用程序和配置,这意味着与从传统来源安装应用程序相比,系统管理员不需要花费那么多时间来让容器中的应用程序运行。DockerhubQuay.io 是提供容器引擎使用的镜像的仓库。

然而,容器最大的吸引力在于它们能够“优雅地死亡”并在负载均衡需要时重新生成。无论容器的消亡是由于崩溃引起的,还是仅仅因为服务器流量低而不再需要,容器的启动成本都很“低廉”,并且它们被设计为无缝地出现和消失。由于容器注定是短暂的,并且可以根据需要频繁地生成新实例,因此期望对它们的监控和管理不是由人类实时完成的,而是自动化的。

Docker 的替代方案

Linux 容器促进了高可用性计算的巨大转变。有很多工具集可以帮助你在容器中运行服务,甚至整个 操作系统开放容器倡议 (OCI) 是一个行业标准组织,旨在鼓励创新,同时避免供应商锁定的风险。由于 OCI,你在选择容器工具链时有了更多选择,包括 Docker、CRI-OPodmanLXC 等。

容器实用工具

按照设计,无论你是运行许多不同的服务还是运行少数服务的多个实例,容器都可以快速倍增。如果你决定在容器中运行服务,你可能需要设计用于托管和管理这些容器的软件。这通常被称为 容器编排。虽然 Docker 和其他容器引擎(如 Podman 和 CRI-O)是用于容器定义和镜像的优秀实用工具,但它们的工作是创建和运行容器,而不是帮助你组织和管理它们。诸如 KubernetesOKD 等项目为 Docker、Podman、CRI-O 等提供容器编排。

在生产环境中运行这些工具时,你可能需要通过下游项目(如 OpenShift,它基于 OKD)投资支持。

关于 Docker 社区版你需要了解的内容

Docker 的开源组件被收集在一个名为 Docker 社区版的产品中,或 docker-ce。这些组件包括 Docker 引擎和一组终端命令,以帮助管理员管理他们正在使用的所有 Docker 容器。你可以通过在你的发行版的软件包管理器中搜索 docker 来安装此工具链。

为什么要使用 Docker

开源的优点之一是你可以选择使用哪种技术来完成任务。Docker 引擎对于需要轻量级、干净的测试环境但不需要复杂编排的独立开发人员非常有用。如果 Docker 在你的系统上可用,并且你周围的每个人都熟悉 Docker 工具链,那么 Docker 社区版 (docker-ce) 是开始使用容器的好方法。

DockerhubQuay.io 是为你的首选容器引擎提供镜像的仓库。如果 Docker 社区版不可用或不受支持,那么 Podman 是一个明智的选择。确保开放标准占上风的努力正在进行中,因此你的容器解决方案的重要长期战略应该是坚持尊重和促进开源和开放标准的项目。专有的附加功能起初可能看起来很吸引人,但通常情况下,一旦你将工具提交给不允许迁移的产品,你就会失去选择的灵活性。容器可以是解放性的,只要它们是解放的。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.