Docker 是一个开源平台,开发人员可以使用该平台构建、部署、运行、更新和管理容器。
容器是标准化的、可执行的组件,它将应用程序源代码与在任何环境中运行该代码所需的操作系统 (OS) 库和依赖项相结合。
值得注意的是,当人们谈论 Docker 时,他们通常指的是 Docker Engine(用于构建和运行容器的运行时)。Docker 也指 Docker, Inc.1,即销售商业版 Docker 的公司。它还与 Docker 开源项目2 有关,Docker, Inc. 和许多其他组织和个人都为该项目做出了贡献。
容器简化了分布式应用程序的开发和交付。随着组织转向云原生开发和混合多云环境,它们变得越来越流行。开发人员可以不使用 Docker,直接利用 Linux® 和其他操作系统内置的功能来创建容器,但 Docker 可以让容器化变得更快、更简单。截至本文撰写之时,Docker 报告称,每月有超过 2000 万开发人员使用该平台3。与包括 Kubernetes 在内的其他容器化技术一样,Docker 在现代软件开发,特别是微服务架构中发挥着至关重要的作用。
与传统的大型、紧密耦合的应用程序的单一方法相比,微服务提供了云原生架构框架。该框架中,许多较小、松散耦合且可独立部署的较小组件或服务组成单个应用程序。每个服务都可以使用 Docker 进行容器化,从而简化部署,并允许团队根据需要推出新版本和扩展应用程序。
Linux 内核中内置的进程隔离和虚拟化功能使容器成为可能。这些功能包括控制组 (Cgroup) 和命名空间,前者用于在进程之间分配资源,后者用于限制进程对系统的其他资源或区域的访问或可见性。
利用容器,多个应用程序组件将能够共享单个主机操作系统实例的资源。这种共享方式类似于虚拟机管理程序支持多个虚拟机 (VM) 共享单个硬件服务器的中央处理器 (CPU)、内存和其他资源。
容器技术提供了虚拟机 (VM) 的所有功能和优势,包括应用程序隔离和经济高效的可扩展性,以及显著的其他优势:
使用容器的组织声称还有许多其他好处,包括提高应用程序质量、更快地响应市场变化等。
Docker 是应用最广泛的容器化工具,占有 82.84% 的市场份额。4Docker 如今非常流行,"Docker" 和“容器”可以互换使用。然而,在 Docker 于 2013 年以开源方式公开发布之前,第一批与容器相关的技术已经存在了数年,甚至几十年5。
最值得注意的是,2008 年在 Linux 内核中实施了 LinuXContainers (LXC),从而完全实现了单个 Linux 实例虚拟化。虽然今天仍在使用 LXC,但有较新的 Linux 内核技术可用。Ubuntu 是一个现代的开源 Linux 操作系统,它也提供了该功能。利用 Docker,开发人员可使用简单的命令访问这些原生容器化功能,并通过节省人力的应用程序编程接口 (API) 自动执行这些功能。
与兼容性较差的老旧 LXC 相比,使用 Docker 有很多优势。
借助 Docker,开发人员可以将多个进程组合到一个容器中。利用这种灵活性,可以构建一种应用程序,在关闭该应用程序的某个组件以进行更新或修复时,该应用程序仍然可以继续运行。
Docker 可以根据应用程序源代码自动构建容器。
Docker 可以跟踪容器映像版本,回滚到以前的版本以及跟踪版本构建者和构建方式。Docker 甚至可以只上传现有版本和新版本之间的增量(软件模块的部分版本)。
开发人员可以访问包含数千个用户上传的容器的开源注册表。
如今,Docker 容器化也适用于 Microsoft Windows Server 和 Apple MacOS。开发人员可以在任何操作系统上运行 Docker 容器。所有领先的云服务提供商 (CSP),包括 Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Services 和 IBM® Cloud,都提供特定服务来帮助开发人员构建、部署和运行使用 Docker 容器化的应用程序。
Docker 使用客户端/服务器架构。以下是与 Docker 相关的核心组件以及其他 Docker 术语和工具的细分。
Docker 主机:Docker 主机是运行 Linux(或其他与 Docker 引擎兼容的操作系统)的物理机或虚拟机。
Docker Engine:Docker Engine 是一个客户端/服务器应用程序,由 Docker 守护进程、与守护进程交互的 Docker API 以及与守护进程对话的命令行界面 (CLI) 组成。
Docker 守护程序:Docker 守护程序是一种使用客户端命令创建和管理 Docker 映像的服务。从本质上讲,Docker 守护程序充当 Docker 实施的控制中心。
Docker 客户端:Docker 客户端提供访问 Docker API(一种 REST API)的 CLI,以通过 Unix 套接字或网络接口与 Docker 守护程序进行通信。客户端可以远程连接到守护进程,或者开发人员可以在同一计算机系统上运行守护进程和客户端。
Docker 对象:Docker 对象是 Docker 部署的组件,可帮助打包和分发应用程序。它们包括映像、容器、网络、卷、插件等。
Docker 容器:Docker 容器是 Docker 映像的实时运行实例。Docker 映像是只读文件,而容器是实时的短暂可执行内容。用户可以与它们交互,管理员可以使用 Docker 命令调整其设置和条件。
Docker 映像:Docker 映像包含可执行的应用程序源代码以及应用程序代码作为容器运行所需的所有工具、库和依赖项。当开发人员运行 Docker 映像时,它会成为一个(或多个)容器实例。
从头开始构建 Docker 映像是可能的,但大多数开发人员都是从公共存储库中提取这些映像。开发人员可以从单个基础映像创建多个 Docker 映像,并将共享其堆栈的共同点。
Docker 映像包含多个层,每个层对应于一个映像版本。每当开发人员对映像进行更改时,都会创建一个新的顶层,该顶层替换上一个顶层以作为当前映像版本。以前的层将被保存,以便进行回滚或在其他项目中重用。
每次通过 Docker 映像创建容器时,都会创建另一个新的层(称为容器层)。对容器所做的更改(例如添加或删除文件)将保存到容器层,并且这些更改仅在容器运行时存在。
这种迭代的映像创建过程提高了整体效率,因为多个活动容器实例可以从单个基础映像运行。这样做时,它们使用一个公共堆栈。
Docker build:Docker build 命令拥有构建 Docker 映像的工具和功能。
Dockerfile:每个 Docker 容器以一个简单的文本文件开始,其中包含如何构建 Docker 容器映像的指令。Dockerfile 可自动执行创建 Docker 映像的过程。它本质上是 Docker Engine 为构建映像而运行的 CLI 指令列表。Docker 命令列表庞大但已标准化:无论内容、基础设施或其他环境变量如何,Docker 操作的工作方式都是相同的。
Docker 文档:Docker 文档是指用于构建容器化应用程序的官方 Docker 资源、手册和指南库。
Docker Hub:Docker Hub 6是 Docker 映像的公共存储库,自称是世界上最大的容器映像库和社区7。它存储有超过 10 万个来自商业软件供应商、开源项目和个人开发人员的容器映像。Docker Hub 包括 Docker, Inc. 生成的映像、属于 Docker Trusted Registry 的认证映像以及数千个其他映像。
所有 Docker Hub 用户都可以随意共享他们的映像。他们还可以从 Docker 文件系统中下载预定义的基础映像,以作为任何容器化项目的起点。
还存在其他映像存储库,包括 GitHub 8。GitHub 是一种存储库托管服务,以应用程序开发工具和促进协作和沟通的平台而闻名。Docker Hub 用户可以创建一个能容纳很多映像的存储库。存储库可以是公共存储库,也可以是私有存储库,并且可以链接到 GitHub 或 BitBucket 帐户。
Docker Desktop:Docker Desktop 是一款适用于 Mac 或 Windows 的应用程序,包括 Docker Engine、Docker CLI 客户端、Docker Compose、Kubernetes 等。它还提供对 Docker Hub 的访问。
Docker 注册表:Docker 注册表是用于 Docker 映像的可扩展的开源存储和分发系统。它使开发人员能够通过使用标记进行识别来跟踪存储库中的映像版本。这种跟踪和识别是使用 Git(一种版本控制工具)完成的。
Docker 插件:开发人员使用插件来增强 Docker Engine 的功能。Docker Engine 插件系统中包含多个支持授权、卷和网络的 Docker 插件;也可以加载第三方插件。
Docker 扩展:利用 Docker 扩展,开发人员将能够在 Docker Desktop 中使用第三方工具来扩展其功能。开发人员工具的扩展包括 Kubernetes 应用程序开发、安全性、可观察性等。
Docker Compose:开发人员可以使用 Docker Compose 管理多容器应用程序,其中所有容器都在同一台 Docker 主机上运行。Docker Compose 创建一个 YAML (.YML) 文件,该文件指定在应用程序中包含哪些服务,并且可以使用一个命令部署和运行容器。由于 YAML 语法与语言无关,因此,可以在以 Java、Python、Ruby 和很多其他语言编写的程序中使用 YAML 文件。
开发人员还可以使用 Docker Compose 定义用于存储的持久卷,指定基础节点以及记录和配置服务依赖项。
仅运行几个容器时,在 Docker Engine(业界事实上的运行时)中管理应用程序非常简单。然而,对于包含数千个容器和数百个服务的部署,如果没有容器编排工具,几乎不可能监控和管理容器生命周期。
虽然 Docker 包含自己的编排工具(称为Docker Swarm),但 Kubernetes 是行业标准。其他流行的容器编排平台包括 Apache Mesos 和 Nomad。
Kubernetes 是一个开源容器编排平台,源自 Google 为内部使用而开发的一个项目 Borg。Kubernetes 于 2014 年向公众推出,它可以安排和自动执行基于容器架构的管理所必需的任务,包括容器部署、更新、服务发现、存储配置、负载平衡、运行状况监控等。2015 年,Google 将 Kubernetes 捐赠给了 Cloud Native Computing Foundation (CNCF)9,这是一个开源、供应商中立的云原生计算中心。
此外,通过使用 Kubernetes 的开源工具生态系统(包括 Istio、Knative 和 Tekton),组织可以为容器化应用程序部署高生产率的 平台即服务 (PaaS)。该生态系统还为无服务器计算提供更快的入门途径。
在 Docker 捐赠了容器映像规范和运行时代码 runc 之后,开放容器倡议 (OCI) 10于 2015 年成立,它是一个 Linux 基金会项目,致力于围绕容器映像格式和运行时创建开放的行业标准。OCI 由 Docker、IBM 和 Red Hat® 等领先公司组成。它支持创新,同时帮助企业避免供应商锁定。
虽然 Docker 是最知名、使用频率最高的容器技术,但更广泛的生态系统已经对 Containerd 和其他替代方案,包括 LXC、CRI-O、Podman 等进行了标准化。2017 年,Docker 将 Containerd 项目捐赠给了 CNCF。Containerd 是使用 runc 的行业标准容器运行时,是 Docker Engine 的核心容器运行时。
容器化工作负载的复杂性需要实施和维护安全控制,以保护容器及其底层基础设施。Docker 容器安全实践旨在保护容器化应用程序免受安全漏洞、恶意软件和不法分子威胁等风险。
由于 Docker 容器彼此隔离且与主机系统隔离,因此在设计上具有固有的安全级别。但这种隔离并不是绝对的。Docker 安全性围绕着一个整体零信任框架,该框架涵盖容器的运行时、构建和编排。
Docker 和其他容器相关的安全需求增加了 DevSecOps 的普及度。这是一种安全方法,可在软件开发生命周期的每个阶段(从初始设计到集成、测试、交付和部署)自动集成安全实践。此外,Docker 安全最佳实践包括第三方容器安全工具和解决方案,包括扫描和监控,可以在安全问题影响生产之前检测它们。
Docker 的可移植性简化并加快了跨不同环境的云迁移过程,无论是将数据、应用程序和工作负载从本地数据中心迁移到基于云的基础架构,还是从一个云环境迁移到另一个云环境。
根据 Statista 的数据,超过 85% 的全球大型企业在应用程序开发中使用微服务11。Docker 通过每个微服务的容器化以及独立扩展和管理来简化应用程序部署,从而消除了开发人员需要配置和管理特定环境的需求。
将微服务作为软件开发方法,同时结合 Docker,可为开发运维团队奠定坚实的基础。这样,他们将能够采用敏捷实践进行快速迭代和实验,这对于按照市场要求的速度交付软件和服务至关重要。
容器即服务 (CaaS) 使开发人员能够管理和部署容器化应用程序,以便轻松地大规模运行 Docker 容器。所有主要的 CSP 都在提供基础设施即服务 (IaaS)、软件即服务 (SaaS) 等的同时提供 CaaS,作为其云服务组合的一部分。
了解领先企业如何利用容器技术推动创新、可扩展性和效率。立即下载您的副本。
了解混合云战略如何为您的业务带来灵活性、安全性和增长。深入了解专家洞察分析和成功案例,了解领先企业为何做出这一转变。
Docker 通过轻量级、可移植的容器简化了应用程序部署,确保跨环境的一致性、可扩展性和效率。立即使用 Docker 简化流程并提升性能。
准备好用先进的数据解决方案来实现业务转型吗?深入了解 IBM 尖端科技如何帮助您利用数据的力量、简化运营并获得竞争优势。
深入了解 Kubernetes 如何使企业能够处理大规模应用程序、提高资源效率并实现更快的软件交付周期。了解采用 Kubernetes 如何优化 IT 基础架构并提高运营效率。
通过深入了解 IBM 的负载平衡产品,提高基础设施的可用性、可扩展性和安全性。立即采取后续步骤,实现无缝流量管理。
1关于 Docker,Docker
2开源项目,Docker
3Docker 构建,Docker
4 2024 年的 5 大容器化技术,6sense
5容器简史:从 20 世纪 70 年代至今,Aqua,2020 年 1 月 10 日
6 Docker Hub,Docker
7 Docker Hub 概述,Docker
8 GitHub
10开放容器倡议
11 2021 年按组织规模划分的组织中微服务的全球使用情况,Statista,2023 年
12 Docker 宣布 Docker AI 通过特定于上下文的自动化指导提高开发人员的工作效率,Docker,2023 年