什么是 Docker?

Alan Zeichick | 高级撰稿人 | 2025 年 12 月 8 日

如今,软件开发早已摆脱了过去“明明在我的机器上运行正常啊!”的时代。这在很大程度上要归功于容器化技术,它让应用能够在本地和多台云服务器上稳定运行,并通过隔离、一致的环境按需迁移和缩放。

Docker 是一个开源、标准化的软件平台,可帮助开发人员快速构建、测试和部署容器化应用。因此,Docker 及其相关容器服务在过去几年中得到了广泛应用。从 2013 年一项鲜为人知、偏技术向的开源技术起步,Docker 如今已发展成为标准化的运行时环境,获得众多企业级产品的正式支持。

正如我们所说,我们在软件开发上已经走过了漫长的发展之路。

什么是 Docker?

Docker 是一个开源平台,支持开发人员和系统管理员将应用程序打包为容器。这些容器可以被发布到部署平台(如本地服务器或云服务器),并直接运行。根据需要,在一台服务器上可以运行多个 Docker 容器,每个容器承载独立的应用,且应用之间相互隔离,从而保障数据安全和可靠性。

这项技术的一大优势是 Docker 容器能够在任何兼容服务器上运行。2013 年,富有远见的软件工程师 Solomon Hykes 首次在 PyCon 大会上提出了 Docker 的概念。其时,Hykes 与一个专门团队一起致力于解决将应用部署到服务器时面临的诸多难题 — 这类工作通常流程繁琐、资源消耗大且容易出错。按其设想,Docker 有望简化和优化整个应用生命周期。

如今,Docker 容器已被应用于涉及数千个容器和数百台服务器的大规模、业务关键型部署。在容器化概念的启发下,Docker 为应用部署带来了全新的创新方案,并通过一系列强大功能将容器化技术提升到了新高度。

为什么要使用容器?

早在 2008 年,Linux 容器就已被投入使用,但直到 2013 年 Docker 容器问世,这项技术才得到广泛采用。容器的一大优势在于,它包含了运行一个应用或特定服务所需的全部内容,包括所有依赖库、图像(如图标或用户界面组件)、系统工具和运行时可执行程序。Docker 容器专为特定操作系统(如 Linux 或 Windows)设计。大多数情况下,Docker 容器可以直接部署到任何运行该操作系统的服务器、笔记本电脑或台式机上,无需修改任何配置。

Docker 与 Kubernetes 对比

Docker 生态系统负责创建容器,将应用的各个组件放入容器中,并打包以便部署。这对于少量容器来说没问题,但如果是成百上千个容器呢?这时就需要 Kubernetes 自动化平台了。

与 Docker 一样,Kubernetes 也是一个广受科技行业支持的开源项目。它可用于自动化完成以下工作:将 Docker 容器部署到服务器、监控容器性能、按需启动新容器、将容器更新到最新版本,以及在需要时停止容器。

Kubernetes 的主要优势在于,它有助于解决在多台服务器上部署大量容器带来的运维复杂性。因此,无论是在云端还是本地环境,任何容器技术的大规模部署都离不开它。Kubernetes 可自动编排容器生命周期,在基础设施中分发应用容器,并能根据需求快速扩展或收缩资源。

关键要点

  • 容器封装了运行应用所需的一切,包括二进制可执行文件、库、映像、其他数据,以及应用的配置详情。
  • Docker 是创建容器化应用最常用的格式之一;它是开源的,且得到所有主要云技术服务提供商的广泛支持。
  • 使用 Docker 无需手动安装和配置应用,因为这些工作在构建容器时就已完成。
  • 借助隔离性,一台服务器上可运行多个容器,充分发挥服务器硬件的价值。
  • Kubernetes 等行业标准工具可以在网络中自动化部署成百上千个容器化应用。

Docker 详解

Docker 是一款开源的应用开发框架,旨在同时为开发人员和系统管理员提供便利。它支持 DevOps 模式,即开发人员负责管理云端应用,而非传统方式中开发人员只编写代码,再“甩锅”给独立的运维团队去部署和管理应用。

借助 Docker,开发人员能够以轻量、可移植、自给自足的容器形式,轻松构建、打包、分发并在几乎所有系统上运行应用。由此,开发人员可以专注于确保应用满足企业需求,而不必担心底层操作系统或部署环境的差异。

此外,开发人员还可以从数千个面向 Docker 环境的开源容器化应用中直接选用。对于 DevOps 团队而言,Docker 能够很好地融入持续集成和开发工具链,减少系统架构的约束并降低复杂度。通过 Docker 和容器编排云技术服务(如 Kubernetes),任何开发人员都可以在本地创建容器化应用,然后在云端生产环境中运行。

使用 Docker 的优势

Docker 容器让开发变得更加大众化:软件行业通常会根据专业方向(例如前端、后端,或介于两者之间的各类细分领域)划分开发人员。而借助 Docker,任何了解基本概念的人都可以创建、部署和管理容器。相较于直接在服务器上安装软件的传统方式,Docker 的容器化服务还具备许多额外优势。

这些优势包括:

  • 一致性:将应用及其依赖项封装在容器中,可保证运行时行为与性能的一致性。
  • 高效的资源管理:Docker 采用共享内核架构,可在单台主机上以极低开销运行多个容器,充分提高硬件资源利用率。
  • 更高的可扩展性:当容器内运行的应用过载时,Kubernetes 管理平台可在另一台服务器上创建该容器的新实例,随后通过负载均衡器在各实例间分配任务。
  • 隔离性和安全性:容器提供进程隔离,提升服务器上每个运行应用的安全性。
  • 微服务架构:容器化技术是微服务架构的关键动因,可将应用拆分为更小、独立的服务并运行在各自容器中,提升模块化、可扩展性和可维护性。
  • 可移植性:容器让应用可在开发、生产等各类环境中迁移,便于在不同基础设施之间灵活部署。
  • 快速部署:容器启动速度快、资源利用率高,可轻松启停,便于运行时代码更新和实现高效负载均衡。
  • 可靠且高效的资源利用:服务器可专用于运行单个 Docker 容器;如果容器无需占用全部资源,还可运行更多容器,充分利用硬件性能。
  • 简化管理:Docker 直观的界面和丰富的工具、命令简化了容器管理,便于监控、更新和扩展应用。
  • 更快部署和 CI/CD 集成:在服务器上安装配置软件可能需要数分钟甚至数小时,而部署容器呢,仅需几秒。此外,Kubernetes 自动化平台对于被广泛应用于云原生应用的现代持续集成/持续部署方法也至关重要。

Docker 的工作原理

Docker 的核心概念是映像和容器。其中,Docker 映像包含运行软件所需的所有内容:可执行代码、驱动程序、工具、脚本、库、部署等。

Docker 容器则是 Docker 映像的运行实例。与传统虚拟机不同,Docker 容器直接运行在主机操作系统内核之上,因此映像本身不包含独立的操作系统。这使得容器轻量且可移植,但也要求容器必须针对特定操作系统进行配置。为 Linux 编写并编译的应用容器,只能在基于 Linux 的服务器上运行;基于 Windows 的应用容器同理。

每个 Docker 容器都拥有独立的文件系统、独立的网络体系(因此拥有独立 IP 地址)、独立的进程空间,以及设定好的 CPU 和内存资源限制。同时,由于 Docker 容器不需要启动操作系统,因此几乎可以瞬间启动。Docker 的核心是隔离:将主机操作系统的资源与应用分离开。这就是为什么可以在一台服务器上运行大量容器,彼此安全隔离,同时共享底层操作系统和硬件资源。

Docker 架构详解

Docker 生产系统的架构需要包含:Docker 守护进程、Docker 客户端、容器映像和注册表,以及容器编排和管理。这些组件既可以运行在云端,也可以运行在本地环境。

  • Docker 守护进程是运行在每台用于承载 Docker 容器的服务器、桌面设备或工作站上的后台进程。它负责管理与容器的所有交互操作,例如启动、停止容器,以及为容器路由进出的网络通信。
  • Docker 客户端是开发人员和管理员用来与 Docker 守护进程交互的工具。Docker 客户端最初仅提供命令行界面,如今已支持图形化界面。
  • 容器映像是用于供应容器的只读模板。具体而言,Docker 守护进程读取容器映像,按照映像定义在服务器上创建、配置容器,并启动容器内的应用。
  • 容器注册表是存储 Docker 映像及其描述信息的集中化资源。Docker 客户端或 Kubernetes 自动化平台会指示 Docker 守护进程访问容器注册表,根据需要检索和启动相应的容器映像。
  • 容器编排是对大量容器进行管理的过程 — 这些容器可能有成百上千个,分布在云端或本地数据中心的数十乃至上百台服务器中。对于规模较小的部署,企业可以使用 Docker 平台内置的 Docker Swarm;对于较大规模的企业级部署,Kubernetes 是行业标准方案。
  • 容器管理不仅包括编排,还涉及扩展、负载均衡、日志记录和日记分析、安全保护和访问控制等。

Docker 与虚拟机对比

传统虚拟机 (VM) 与容器之间的区别非常显著。VM 是对服务器(或任意计算机)的完整软件模拟,其中包含操作系统、设备驱动程序、应用和数据。在 VM 架构中,虚拟机管理程序运行在服务器上,负责编排虚拟机,其所承担的功能与 Docker Engine 对容器的作用相同。

相比之下,容器只包含应用和数据,它直接使用主机的操作系统和设备驱动程序。

VM 用于在单台物理机上运行多个操作系统,并提供安全、隔离的应用运行环境。不过,尽管 VM 具备一定优势,但也存在诸多局限:

  • 资源利用效率低:每个 VM 都需要完整的操作系统,因此相比容器,会消耗更多内存、存储和处理资源。
  • 可扩展性有限:由于 VM 是对整台计算机的模拟,仅管理其开销就需要大量资源,这会限制计算机执行实际任务的能力。
  • 启动速度慢:启动 VM 需要加载完整操作系统,这个过程非常耗时,会影响整体系统性能。

而容器则在共享主机操作系统内核的同时,为应用运行提供隔离环境,无需在每个容器内部安装完整操作系统。这种共享内核架构带来了多项优势:

  • 高效利用资源:容器共享主机内核,与 VM 相比,内存和存储需求更低。
  • 更高的可扩展性:对容器化应用进行水平扩展是 Docker 的主要目标之一。其设计支持快速部署多个实例,且资源开销极小。
  • 快速启动:由于无需启动完整操作系统,容器可在数秒内启动,实现更快的应用部署并提升系统性能。
相比之下,Docker 容器使用主机系统的操作系统和设备驱动程序,因此可将更多的服务器处理器和内存资源分配给应用。一台运行 20 个 Docker 容器的 Linux 服务器,只需要运行一个 Linux 实例即可。
虚拟机架构与 Docker 容器对比

容器化部署与传统部署对比

在传统部署模式下,软件会安装在服务器或虚拟机上,这些机器已预先配置好操作系统、设备驱动程序、应用和数据。整个过程较为缓慢,适合在专用服务器(无论是在云端还是数据中心)上运行的大型单体应用。

与此相反,容器提供了一种轻量化方法,支持将应用及应用的所有依赖项打包为映像,然后将映像存储到存储库,只需数秒即可被提取并在目标服务器上运行。Docker 容器模式更便于借助自动化工具进行扩展,同时具备成本效益,让开发人员能够充分发挥服务器性能。

Docker 的主要组件

Docker 的核心概念是前文提到的映像和容器。以下是 Docker 容器系统的其他组件:

  • Docker Engine:Docker Engine 是核心运行时环境,负责构建、运行和管理容器。它在主机操作系统和容器之间提供了一个接口,可实现理想的资源分配和性能保障。
  • Docker Hub:Docker Hub 是一个云端存储库,提供丰富的公有和私有映像,也作为平台用于 Docker 相关项目的分享与协作。
  • Docker Compose:Docker Compose 是一款简化多容器应用的定义和管理的工具。它支持开发人员在一个 YAML 文件中定义和配置多个容器及其依赖关系,更轻松地部署和扩展复杂应用。
  • Docker Swarm:Docker Swarm 是一款集群和编排工具,可将多个 Docker Engine 组成集群。它支持在多台主机上管理大量容器,提供负载均衡、服务发现、应用弹性部署等功能。目前,Docker Swarm 已在很大程度上被开源容器管理和编排平台 Kubernetes 所取代。
  • Docker CLI 和 API:Docker 命令行界面 (CLI) 为开发人员和管理员提供直观的工作命令和简单的脚本工具,用于管理容器,包括启动、停止和监控状态等操作。Docker API 则支持用户使用 Kubernetes 等更复杂的自动化和编排工具,能够比 CLI 更便捷地实现同类管理功能。

Docker 常见使用场景

Docker 容器化技术的通用性和强大特性,使其成为各行业企业的首选方案。以下是 Docker 的常见使用场景(通常与 Kubernetes 结合使用):

  • 大数据和分析:高效的资源利用率和可扩展性,让容器成为大数据和分析应用的理想选择。金融、医疗等数据密集型行业的企业,已使用容器处理和分析大型数据集,以此优化资源分配并提升性能。
  • 云原生应用:随着云计算的兴起,容器已成为构建云原生应用的一大关键助手。将应用打包为容器进行部署,可实现跨云技术服务提供商的可移植性和灵活性,在享受云计算优势的同时避免供应商锁定。
  • DevOps 和持续集成:Spotify、Pinterest 等企业借助容器简化 DevOps 流程,实现持续集成。容器提供一致、可复现的环境,简化了开发流程中代码变更的测试和部署工作。
  • 基于微服务的架构:Netflix、Uber、Airbnb 等知名消费科技公司,均采用容器化技术构建和管理微服务架构。容器支持并行运行多项服务,能够有效应对复杂应用场景,在这些企业的成功道路上发挥着重要作用。
  • Web 应用部署:容器被广泛用于部署 Web 应用,提供稳定可靠的性能。无论是简单博客还是复杂电商平台,容器都能提供可扩展、高安全性的运行环境。

容器快速入门

如果您是 Docker 和容器的新手,这里有一份循序渐进的上手指南:

  1. 安装 Docker。 第一步是在您使用的操作系统上下载并安装 Docker。Docker 为 Windows、macOS 及各种 Linux 发行版提供安装包,让广大用户都能轻松使用。
  2. 创建 Docker 映像。 首先创建一个 Docker 映像,它将作为您的容器模板。这需要编写一个 Dockerfile 文本文件,在其中定义构建映像所需的步骤,包括基础映像、依赖项安装和应用配置。Docker 映像采用分层构建,每一层对应 Dockerfile 中的一个步骤。
  3. 构建和运行。 Docker 映像准备就绪后,您就可以构建并运行您的第一个容器了。Docker 命令行界面提供了直观的命令来管理容器,支持启动、停止和监控容器状态。
  4. 探索 Docker 生态系统。 Docker 提供丰富的工具和服务,可进一步提升容器化体验。例如,Docker Hub 既是一个提供了大量开箱即用映像的云端存储库,还是一个 Docker 相关项目的共享和协作平台;Docker Compose 则简化了多容器应用的管理。

Docker 优秀实践

在企业内部使用 Docker 时,可以参考众多采用云原生开发的企业所践行的优秀实践:

  • 优化映像大小和分层:更小的 Docker 映像更易于构建、测试和部署。您可以从小型基础映像入手,并在构建映像前清理系统中不必要的文件。
  • 管理安全性和权限:仅允许授权用户访问容器,且容器内异常运行的应用不应破坏系统或威胁安全。此外,遵循通用安全准则:永远不要以 root 用户运行应用;及时更新补丁;使用 Docker 的访问控制功能限制容器在 Linux 或 Windows 中的权限。
  • 高效的网络和负载均衡:容器在松散耦合状态下最为高效 — 即可在网络中任意合适位置创建和迁移容器,而不绑定固定位置。对于大规模部署,您可以使用 Docker Network 来创建一个灵活的网络架构,使用 Nginx 等工具进行容器间流量路由和均衡负载。
  • Docker 监控和日志记录:与部署在单台服务器上的单体应用不同,如果不使用自动化工具,监控大规模容器化应用的运行状态会非常困难。请制定适当的计划来集中收集容器日志,然后使用监控工具来检测故障和进行性能指标可视化。

优化容器策略,推动业务增长

Oracle 提供创建和部署云原生应用所需的一切,包括工具、服务和自动化技术,让开发团队能够快速构建应用,同时减少运维工作量。

Oracle 云原生服务基于 Oracle Cloud Infrastructure (OCI) 运行。OCI 提供了一个基于标准的平台,与其他云技术服务提供商相比,性能更高、成本更低。通过采用基于开源和开放标准的服务(如 Docker 和 Kubernetes),OCI 支持开发人员在任意云环境或本地数据中心运行应用。

Docker 及包括 Kubernetes 在内的相关技术,在过去几年中得到了广泛应用并取得巨大成功。如今,Docker 这一开源技术已从 2013 年的鲜为人知发展为一种标准化运行时环境,成为大型企业部署的一种可靠选择。

Docker 是当今模块化、云原生软件的重要组成部分,具有可扩展性、弹性、灵活性和成本优势。了解如何开始。

Docker 常见问题解答

容器是什么?

容器将应用的全部代码和依赖项打包为标准格式,使其能够在大多数服务器上快速、稳定地运行。Docker 是业界标准的开源容器格式。

为何要使用 Docker 而不是传统部署方法?

在传统模式下,管理员必须在服务器上安装应用的各种文件(包括可执行二进制文件、库和数据),然后进行全套配置以确保正常运行。如果要在同一台服务器上同时运行多个应用以充分硬件利用率,还必须保证这些应用不会互相干扰,且其中一个应用出现故障时不会导致其他应用一起停止响应。可以说,这套流程极其复杂,而且难以自动化。

相比之下,当使用容器打包应用时,容器会打包应用的可执行二进制文件、库和数据,而且所有一切都是预配置的。运行该应用只需要将容器复制到服务器上,剩下的工作全部由 Docker Engine 和 Docker 守护进程完成。更重要的是,容器之间是相互隔离的,因此即使一个应用出现故障,也不会影响其他容器里运行的应用。借助 Kubernetes 等工具,还可以大规模地自动部署和管理容器化应用。

Docker 能完全取代虚拟机吗?

可以将 Docker 和虚拟机视为互补的技术。容器使用主机的操作系统和设备驱动程序,速度快,效率高,在大多数场景下通常是更优选择。

不过,有些场景还是更适合使用虚拟机,包括:在专用操作系统中运行应用,不共享任何资源;需要专用设备驱动程序;或在同一台服务器上运行多个操作系统。

Docker 与 Kubernetes 如何集成?

Kubernetes 是一款用于管理 Docker 容器的开源系统。它负责部署容器、启动和停止容器、在需要时通过多实例对容器进行扩展,甚至在应用出现故障或无响应时自动重启容器。Docker 系统中的 Docker Compose 组件可处理小规模容器部署;而 Kubernetes 更适合扩展至数十、数百乃至数千个容器的场景。

Docker 在企业云战略中扮演什么角色?

Docker 容器非常适合在云端部署软件。这既包括运行在单个容器中的传统应用,也包括基于微服务的云原生应用 — 这类应用由数十个独立服务组成,每个服务运行在专属容器内。容器可以简化云端服务的开发和部署,提升企业应用的可扩展性、安全性、合规性、可测试性和可用性。Docker 和 Kubernetes 甚至还能充分提高云服务器的资源利用率,从而降低运行成本。

注:为免疑义,本网页所用以下术语专指以下含义:

  1. 除Oracle隐私政策外,本网站中提及的“Oracle”专指Oracle境外公司而非甲骨文中国。
  2. 相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。