Docker 从 Linux 容器的演变


介绍

Docker 是一款强大的工具,允许开发者轻松构建、部署和运行容器化应用程序。容器是一种轻量级且可移植的虚拟化形式,它将应用程序及其依赖项打包在一起,使其易于在不同的环境之间移动。Docker 的演变始于 Linux 容器 (LXC),并且从那时起彻底改变了我们对软件开发和分发的思考方式。在本文中,我们将探讨 Docker 从 Linux 容器的演变、使用容器的好处以及 Docker 如何增强 LXC 的概念。

什么是容器?

容器是一种逻辑打包机制,它将应用程序从运行它们的运行环境中提取出来。这种抽象的好处包括能够轻松地在任何环境中一致地部署应用程序。开发者可以在本地桌面上构建应用程序,将其容器化,并安全地将其部署到公共云中。虚拟机和容器都虚拟化对底层硬件的访问,例如CPU、内存、存储网络。但是,与容器相比,虚拟机的创建和维护成本更高,需要运行多个操作系统的副本。

Docker 从 Linux 容器的演变

Docker 首次发布于 2013 年,但其根源可以追溯到 2008 年首次推出的 Linux 容器 (LXC)。LXC 是 Linux 内核容器化功能(例如命名空间和“cgroups”)的用户空间接口。它允许在单个主机上运行多个隔离的 Linux 系统或容器,共享主机的内核。Docker 在 LXC 的概念上进行了构建,并创建了一个新的平台来开发、交付和运行容器化应用程序。Docker 和 LXC 之间的一个主要区别在于,Docker 使用分层文件系统(称为UnionFS),允许多个容器共享相同的底层镜像。这使得 Docker 比传统的虚拟化更有效率和轻量级。

Docker 还引入了容器镜像的概念,容器镜像是应用程序及其依赖项的预构建、预配置镜像。这些镜像可以轻松地在不同的团队和环境之间共享和重用,从而更容易一致且可靠地部署应用程序。Docker 还添加了用于管理容器的命令行界面(CLI)REST API,使开发者更容易将 Docker 集成到他们的工作流程中。此外,Docker 还引入了一个用于共享和发现镜像的集中式中心,称为Docker Hub,这使得开发者更容易找到和使用图像。

了解 Linux 容器

Linux 容器,通常称为 LXC,可能是第一个完整的容器管理器的实现。它是操作系统级别的虚拟化,提供了一种机制,用于限制和优先分配多个应用程序的资源,例如 CPU 和内存。它还允许完全隔离应用程序的进程树、网络文件系统。所有进程共享相同的内核空间,这使得容器与虚拟机相比非常轻量级。

Docker 的到来

虽然LXC 提供了一个整洁且强大的用户空间接口,但它还不够用户友好,也没有产生大规模的吸引力。Docker 通过抽象处理内核函数的大部分复杂性,并提供一个简单的格式来容器化应用程序及其依赖项,从而改变了游戏规则。它还支持自动创建、版本控制和重用容器。Docker 与不同 LXC 版本和发行版的副作用隔离。

Docker 相对于 LXC 的优势

Docker 提供操作系统级别的虚拟化来进行沙盒化,就像 LXC 一样。但是,Docker 提供了比 LXC 更多的优势,例如更简单易用的界面、对自动容器创建和版本控制的支持,以及用于共享和发现镜像的集中式中心。此外,Docker 具有模块化架构,它依赖于关键组件,例如 Docker 守护程序(dockerd)containerdrunc 来提供其服务。这种架构允许核心组件独立发展和标准化。

Docker 工作流程

典型的 Docker 工作流程包括将应用程序打包为镜像,将其发布到注册表,并将其作为容器运行,可能还会持久化。Docker 的命令行界面和REST API 使将此工作流程集成到您的开发过程中变得很容易。

Docker 命令

要开始使用 Docker,您首先需要在您的系统上安装它。安装 Docker 后,您可以开始使用它来运行容器。以下命令将执行一个简单的“Hello, World”容器:

要列出所有正在运行的容器,请使用以下命令:

$ docker ps

要停止正在运行的容器,请使用以下命令:

$ docker stop <CONTAINER ID>

Docker 架构

Docker 具有模块化架构,它依赖于关键组件,例如 Docker 守护程序(dockerd)、containerd 和 runc 来提供其服务。这种架构允许核心组件独立发展和标准化。Docker 守护程序(dockerd) 是 Docker 的核心,包括侦听 API 请求并管理 Docker 对象的 Docker 守护程序。它还提供 API 接口和命令行界面来与 Docker 守护程序进行交互。containerd 是另一个服务守护程序,它有助于执行下载镜像并将其作为容器运行等任务。它遵循客户端(如dockerd)可以连接到的标准 API。Runc 是与内核功能交互并提供创建命名空间和控制组的标准机制的组件。它是 libcontainer 的重新打包,以符合OCI 规范。本节将介绍 Docker 的核心组件及其在架构中的作用。

结论

Docker 自从作为 Linux 容器的容器诞生以来已经走了很长一段路。它已成为容器化的实际标准,并且极大地简化了开发、部署和运行应用程序的过程。

更新于:2023年1月20日

浏览量 304

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.