主页 topics 什么是 Docker容器? 什么是 Docker?
Docker 是一个用于构建、部署和管理容器化应用的开源平台
企业中的容器 如何使用独立容器在 Kubernetes 或 OpenShift 上提供模型
黑色和蓝色背景
什么是 Docker?

Docker 是一个开源平台,开发人员可以使用该平台构建、部署、运行、更新和管理容器,容器是标准化的可执行组件,它将应用程序源代码与在任何环境中运行该代码所需的操作系统 (OS) 库和依赖项合并在一起。

容器 (Container) 简化了分布式应用程序的开发和交付过程。随着组织转向云原生开发和混合多云环境,它们变得越来越流行。开发人员可以直接使用 Linux 和其他操作系统中内置的功能,在没有 Docker 的情况下创建容器。但是,Docker 使容器化更快、更轻松和更安全。在撰写本文时,Docker 宣称超过 1300 万开发人员使用该 Docker 平台(ibm.com 外部链接)。

Docker 也指 Docker, Inc.(ibm.com 外部链接),该公司销售 Docker 商业版本。它还与 Docker 开源项目有关,Docker, Inc. 和很多其他组织和个人为该项目做出了贡献。

生成式 AI 和混合云的价值

了解组织如何利用混合云推动业务成果,从而扩大 AI 的影响。

相关内容

注册并获取有关混合云的指南

容器  (Container) 的工作原理及受欢迎的原因

容器是通过 Linux 内核中内置的过程隔离和虚拟化功能来实现的。 控制组 (Cgroups) 用于为各进程分配资源,名称空间用于限制进程访问或对其他资源或系统区域的可视性 - 这些功能支持多个应用组件共享主机操作系统的单个实例的资源,这与系统管理程序支持多台虚拟机 (VM) 共享单个硬件服务器的 CPU、内存和其他资源的方式大致相同。 

因此,容器技术可提供虚拟机的所有功能和优势,包括应用隔离、经济高效的可扩展性和可处置性,以及其他重要的优势:

  • 更轻巧:与虚拟机不同,容器不会承载整个操作系统实例和系统管理程序的有效负载。 它们仅包括执行代码所需的操作系统进程和依赖项。 容器大小以兆字节为单位(某些虚拟机则是以千兆字节为单位)来衡量,因此它们可以更好地利用硬件容量,启动速度也更快。 

  • 提高了开发人员的工作效率:容器化应用可以“一次编写,随处运行”。 与虚拟机相比,容器的部署、配置和重启过程更迅速且更简单。 这使得容器非常适合在持续集成持续交付 (CI/CD) 管道中使用,并且更适合采取敏捷和 DevOps 实践的开发团队。  

  • 提高了资源利用率:开发人员使用容器在硬件上运行的应用副本数量是使用虚拟机的数倍。 这可以减少云支出。

使用容器的公司还报告了其他一些好处,包括提高应用质量、更快应对市场变化等等。 了解有关此交互式工具的更多信息: 

下载完整报告:企业中的容器
为什么要使用 Docker?

Docker 如今非常受欢迎,甚至可以与“容器”一词互换使用。 而在 Docker 于 2013 年面世之前,第一批与容器相关的技术早已存在数年,甚至数十年(链接位于 IBM 外部)。   

最值得注意的是,2008 年,Linux 内核中实现了 LinuXContainers (LXC),LXC 完全支持单个 Linux 实例的虚拟化。 虽然目前仍在使用 LXC,但也提供了使用 Linux 内核的新技术。 现代的开源 Linux 操作系统 Ubuntu 也提供了此功能。 

Docker 支持开发人员使用简单的命令访问这些本机容器化功能,并通过节省工作量的应用程序编程接口 (API) 自动执行。 与 LXC 相比,Docker 提供了以下功能:

  • 增强的无缝容器可移植性:虽然 LXC 容器通常引用特定于机器的配置,但 Docker 容器无需修改即可在任何桌面、数据中心和云环境中运行。 
  • 更轻巧且更细粒度的更新:通过使用 LXC,可以在单个 Docker 容器中组合多个进程。 这样就可以构建持续运行的应用,即使为了更新或修复而关闭某个部分也不例外。 

     

  • 自动化容器创建:Docker 可以基于应用源代码自动构建容器。 

     

  • 容器版本控制:Docker 可以跟踪容器映像的版本,回滚到先前的版本,以及跟踪版本的构建者和构建方式。 Docker 甚至可以只上传现有版本和新版本之间的增量。 

     

  • 容器复用:现有容器可用作基本映像(本质上类似于用于构建新容器的模板)。 

     

  • 共享容器库:开发人员可以访问包含数千个用户贡献容器的开源注册表。 

如今,Docker 容器化也适用于 Microsoft Windows 和 Apple MacOS。 开发人员可以在任何操作系统上运行 Docker 容器,大多数领先的云提供商(包括 Amazon Web Services (AWS)、Microsoft Azure 和 IBM Cloud)都提供了一些专用  Docker 服务,这些服务可帮助开发人员构建、部署和运行使用 Docker 进行容器化的应用。

Docker 工具和  Docker 术语

开发人员在使用 Docker 时会遇到以下工具、术语和技术: 

DockerFile

每个 Docker 容器都从一个简单的文本文件开始,其中包含有关如何构建 Docker 容器映像的指令。 DockerFile 用于自动执行 Docker 映像创建过程。 它本质上是一个命令行界面 (CLI) 指令列表,Docker 引擎将运行这些指令来组装映像。 Docker 命令列表虽然很庞大,但却是标准化的:无论内容、基础架构或其他环境变量如何,Docker 都使用相同方式来操作。 

Docker 映像

Docker 映像包含可执行的应用源代码,以及在将应用代码作为容器运行时所需的所有工具、库和依赖项。 运行 Docker 映像时,它会成为容器的一个(或多个)实例。 

虽然可以从头开始构建 Docker 映像,但大多数开发人员都是从公共存储库中提取 Docker 映像。 可以通过一个基本映像来创建多个 Docker 映像,并且它们将共享堆栈的共性。 

Docker 映像由层组成,每一层对应于该映像的一个版本。 每当开发人员对映像进行更改时,都会创建一个新的顶层,该顶层将替换之前的顶层,作为映像的当前版本。 之前的层会被保存下来,以便执行回滚或在其他项目中复用。 

每次通过 Docker 映像创建容器时,都会创建另一个名为“容器层”的新层。 对容器所做的更改(例如添加或删除文件)仅保存到容器层中,并且仅在容器运行时才会出现。 这种迭代式映像创建过程可以提高整体效率,因为可以仅从一个基本映像中运行多个实时的容器实例,一旦这样操作,这些实例便使用一个公共堆栈。 

Docker 容器

Docker 容器是实时运行的 Docker 映像实例。 Docker 映像是只读文件,而容器是实时的瞬态可执行内容。 用户可以与Docker 容器进行交互,管理员则可以使用 Docker 命令调整其设置和条件。 

Docker Hub

Docker Hub(链接位于 IBM 外部)是Docker 映像的公共存储库,是“世界上最大的容器映像库和社区”。  Docker Hub 存储超过 10 万个容器映像,来源于商业软件供应商、开源项目和开发者个人。  Docker Hub 包括由 Docker, Inc. 生成的映像、属于 Docker Trusted Registry 的经过认证的映像以及成千上万个其他映像。 

所有 Docker Hub 用户都可以随意共享其映像。 他们还可以从 Docker 文件系统下载预定义的基础映像,用作任何容器化项目的起点。 

此外,还有其他映像存储库,最著名的是 GitHub。 GitHub 是一种存储库托管服务,是流行的应用开发工具,也是一个促进协作和沟通的平台。 Docker Hub 的用户可以创建一个能够保存许多映像的存储库 (repo)。 这个存储库可以是公共的,也可以是私有的,并且可以链接到 GitHub 或 BitBucket 帐户。 

Docker Desktop

Docker Desktop(链接位于 ibm.com 外部)是适用于 Mac 或 Windows 的应用,包括 Docker 引擎、Docker CLI 客户端、Docker Compose、Kubernetes 等。 Docker Desktop 还包括对 Docker Hub 的访问。 

Docker 守护程序

Docker 守护程序是一种使用客户端命令来创建和管理 Docker 映像的服务。 本质上,Docker 守护程序是 Docker 实现的控制中心。 运行 Docker 守护程序的服务器即为 Docker 主机。

Docker 注册表

 Docker 注册表是一个用于 Docker 映像的可扩展开源存储和分发系统。 Docker 注册表使您可以使用标记进行标识,跟踪存储库中的映像版本。 可使用版本控制工具 git 来完成此操作。 

Docker 部署和编排

如果只运行少量容器,那么在行业实际运行时 Docker 引擎中管理应用就会非常简单。  但是,如果部署包含数千个容器和数百个服务,没有这些 Docker 专用工具的帮助,几乎不可能管理该工作流程。 

Docker 插件

Docker 插件(链接位于 ibm.com 外部)可用于增加 Docker 的功能。Docker 引擎插件系统中包含许多 Docker 插件,也可以加载第三方插件。 

Docker Compose

开发人员可以使用 Docker Compose 来管理多容器应用,其中所有容器都在同一 Docker 主机上运行。 Docker Compose 会创建一个 YAML (.YML) 文件来指定应用中要包含的服务,并且可以使用单个命令来部署和运行容器。 由于 YAML 语法与语言无关,因此 YAML 文件可用于用 Java、Python、Ruby 和许多其他语言编写的程序。 

开发人员还可以使用 Docker Compose 来定义用于存储的持久卷、指定基本节点,以及记录和配置服务依赖项。 

Kubernetes

在更复杂的环境中监视和管理容器生命周期需要使用容器编排工具。   虽然 Docker 提供了自己的编排工具(名为 Docker Swarm),但大多数开发人员还是会选择使用 Kubernetes。 

Kubernetes 是一个开源的容器编排平台,源自为 Google 内部使用而开发的项目。 Kubernetes 可调度和自动执行对于基于容器的架构管理而言不可或缺的任务,包括容器部署、更新、服务发现、存储配置、负载均衡、运行状况监控等。 此外,Kubernetes 工具的开源生态系统(包括 Istio 和 Knative)使组织能够为容器化应用部署高生产力的平台即服务 (PaaS),并更快地进入无服务器计算时代。 

了解有关 Kubernetes 的更多信息

相关解决方案
Red Hat® OpenShift® on IBM Cloud®

深入了解 Red Hat OpenShift on IBM Cloud 如何在公有和混合环境中利用 Red Hat OpenShift 提高速度、市场响应速度、可扩展性和可靠性。

探索 Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite®

利用 IBM Cloud Satellite 随时随地启动一致的云服务(在本地、边缘和公有云环境中)。

探索 IBM Cloud Satellite
混合云存储解决方案

借助跨本地、私有云和公有云的 IBM 混合云存储解决方案,将数据存储在对应用程序和服务最有意义的地方。

探索混合云存储解决方案
云服务

了解云管理服务方法如何帮助缓解传统 IT 管理和开发运维文化之间的潜在紧张关系。

深入了解云服务
资源 企业中的容器

阅读新的 IBM Research®,了解容器和 Kubernetes 采用的强劲势头。

使用独立容器在 Kubernetes 或 OpenShift 上提供模型

构建独立的容器映像以提供 IBM Watson® NLP 模型,然后在 Kubernetes 或 Red Hat OpenShift 集群上运行。

采取后续步骤

借助 Red Hat OpenShift on IBM Cloud,开发人员能够以快速、安全的方式在 Kubernetes 集群中构建和部署容器化工作负载。减少涉及安全管理、合规性管理、部署管理和持续生命周期管理的繁琐、重复性任务。

深入了解 Red Hat OpenShift on IBM Cloud 免费试用