Docker 从 Linux 容器演进而来

linuxopen sourceoperating system更新于 2026/1/25 19:37:17

简介

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)、containerd 和 runc 等关键组件来提供服务。这种架构允许核心组件独立发展和标准化。

Docker 工作流程

典型的 Docker 工作流程包括将应用程序打包为镜像、将其发布到镜像仓库,并将其作为容器运行(可能具有持久性)。 Docker 的命令行界面和 REST API 可轻松将此工作流程集成到您的开发流程中。

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 是另一个服务守护进程,用于执行下载镜像并将其作为容器运行等任务。它遵循一个标准 API,像 dockerd 这样的客户端可以连接到它。Runc 是与内核函数交互的组件,它提供了创建命名空间和控制组的标准机制。它是 libcontainer 的重新打包版本,符合 OCI 规范。本节介绍 Docker 的核心组件及其在架构中的作用。

结论

Docker 自作为 Linux 容器诞生以来,已经取得了长足的进步。它已成为容器化的事实标准,并极大地简化了应用程序的开发、部署和运行流程。


相关文章


有用资源