Alan Zeichick | 高级撰稿人 | 2025 年 12 月 8 日
如今,软件开发早已摆脱了过去“明明在我的机器上运行正常啊!”的时代。这在很大程度上要归功于容器化技术,它让应用能够在本地和多台云服务器上稳定运行,并通过隔离、一致的环境按需迁移和缩放。
Docker 是一个开源、标准化的软件平台,可帮助开发人员快速构建、测试和部署容器化应用。因此,Docker 及其相关容器服务在过去几年中得到了广泛应用。从 2013 年一项鲜为人知、偏技术向的开源技术起步,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 的主要优势在于,它有助于解决在多台服务器上部署大量容器带来的运维复杂性。因此,无论是在云端还是本地环境,任何容器技术的大规模部署都离不开它。Kubernetes 可自动编排容器生命周期,在基础设施中分发应用容器,并能根据需求快速扩展或收缩资源。
关键要点
Docker 是一款开源的应用开发框架,旨在同时为开发人员和系统管理员提供便利。它支持 DevOps 模式,即开发人员负责管理云端应用,而非传统方式中开发人员只编写代码,再“甩锅”给独立的运维团队去部署和管理应用。
借助 Docker,开发人员能够以轻量、可移植、自给自足的容器形式,轻松构建、打包、分发并在几乎所有系统上运行应用。由此,开发人员可以专注于确保应用满足企业需求,而不必担心底层操作系统或部署环境的差异。
此外,开发人员还可以从数千个面向 Docker 环境的开源容器化应用中直接选用。对于 DevOps 团队而言,Docker 能够很好地融入持续集成和开发工具链,减少系统架构的约束并降低复杂度。通过 Docker 和容器编排云技术服务(如 Kubernetes),任何开发人员都可以在本地创建容器化应用,然后在云端生产环境中运行。
Docker 容器让开发变得更加大众化:软件行业通常会根据专业方向(例如前端、后端,或介于两者之间的各类细分领域)划分开发人员。而借助 Docker,任何了解基本概念的人都可以创建、部署和管理容器。相较于直接在服务器上安装软件的传统方式,Docker 的容器化服务还具备许多额外优势。
这些优势包括:
Docker 的核心概念是映像和容器。其中,Docker 映像包含运行软件所需的所有内容:可执行代码、驱动程序、工具、脚本、库、部署等。
Docker 容器则是 Docker 映像的运行实例。与传统虚拟机不同,Docker 容器直接运行在主机操作系统内核之上,因此映像本身不包含独立的操作系统。这使得容器轻量且可移植,但也要求容器必须针对特定操作系统进行配置。为 Linux 编写并编译的应用容器,只能在基于 Linux 的服务器上运行;基于 Windows 的应用容器同理。
每个 Docker 容器都拥有独立的文件系统、独立的网络体系(因此拥有独立 IP 地址)、独立的进程空间,以及设定好的 CPU 和内存资源限制。同时,由于 Docker 容器不需要启动操作系统,因此几乎可以瞬间启动。Docker 的核心是隔离:将主机操作系统的资源与应用分离开。这就是为什么可以在一台服务器上运行大量容器,彼此安全隔离,同时共享底层操作系统和硬件资源。
Docker 生产系统的架构需要包含:Docker 守护进程、Docker 客户端、容器映像和注册表,以及容器编排和管理。这些组件既可以运行在云端,也可以运行在本地环境。
传统虚拟机 (VM) 与容器之间的区别非常显著。VM 是对服务器(或任意计算机)的完整软件模拟,其中包含操作系统、设备驱动程序、应用和数据。在 VM 架构中,虚拟机管理程序运行在服务器上,负责编排虚拟机,其所承担的功能与 Docker Engine 对容器的作用相同。
相比之下,容器只包含应用和数据,它直接使用主机的操作系统和设备驱动程序。
VM 用于在单台物理机上运行多个操作系统,并提供安全、隔离的应用运行环境。不过,尽管 VM 具备一定优势,但也存在诸多局限:
而容器则在共享主机操作系统内核的同时,为应用运行提供隔离环境,无需在每个容器内部安装完整操作系统。这种共享内核架构带来了多项优势:
在传统部署模式下,软件会安装在服务器或虚拟机上,这些机器已预先配置好操作系统、设备驱动程序、应用和数据。整个过程较为缓慢,适合在专用服务器(无论是在云端还是数据中心)上运行的大型单体应用。
与此相反,容器提供了一种轻量化方法,支持将应用及应用的所有依赖项打包为映像,然后将映像存储到存储库,只需数秒即可被提取并在目标服务器上运行。Docker 容器模式更便于借助自动化工具进行扩展,同时具备成本效益,让开发人员能够充分发挥服务器性能。
Docker 的核心概念是前文提到的映像和容器。以下是 Docker 容器系统的其他组件:
Docker 容器化技术的通用性和强大特性,使其成为各行业企业的首选方案。以下是 Docker 的常见使用场景(通常与 Kubernetes 结合使用):
如果您是 Docker 和容器的新手,这里有一份循序渐进的上手指南:
在企业内部使用 Docker 时,可以参考众多采用云原生开发的企业所践行的优秀实践:
Oracle 提供创建和部署云原生应用所需的一切,包括工具、服务和自动化技术,让开发团队能够快速构建应用,同时减少运维工作量。
Oracle 云原生服务基于 Oracle Cloud Infrastructure (OCI) 运行。OCI 提供了一个基于标准的平台,与其他云技术服务提供商相比,性能更高、成本更低。通过采用基于开源和开放标准的服务(如 Docker 和 Kubernetes),OCI 支持开发人员在任意云环境或本地数据中心运行应用。
Docker 及包括 Kubernetes 在内的相关技术,在过去几年中得到了广泛应用并取得巨大成功。如今,Docker 这一开源技术已从 2013 年的鲜为人知发展为一种标准化运行时环境,成为大型企业部署的一种可靠选择。
Docker 是当今模块化、云原生软件的重要组成部分,具有可扩展性、弹性、灵活性和成本优势。了解如何开始。
容器是什么?
容器将应用的全部代码和依赖项打包为标准格式,使其能够在大多数服务器上快速、稳定地运行。Docker 是业界标准的开源容器格式。
为何要使用 Docker 而不是传统部署方法?
在传统模式下,管理员必须在服务器上安装应用的各种文件(包括可执行二进制文件、库和数据),然后进行全套配置以确保正常运行。如果要在同一台服务器上同时运行多个应用以充分硬件利用率,还必须保证这些应用不会互相干扰,且其中一个应用出现故障时不会导致其他应用一起停止响应。可以说,这套流程极其复杂,而且难以自动化。
相比之下,当使用容器打包应用时,容器会打包应用的可执行二进制文件、库和数据,而且所有一切都是预配置的。运行该应用只需要将容器复制到服务器上,剩下的工作全部由 Docker Engine 和 Docker 守护进程完成。更重要的是,容器之间是相互隔离的,因此即使一个应用出现故障,也不会影响其他容器里运行的应用。借助 Kubernetes 等工具,还可以大规模地自动部署和管理容器化应用。
Docker 能完全取代虚拟机吗?
可以将 Docker 和虚拟机视为互补的技术。容器使用主机的操作系统和设备驱动程序,速度快,效率高,在大多数场景下通常是更优选择。
不过,有些场景还是更适合使用虚拟机,包括:在专用操作系统中运行应用,不共享任何资源;需要专用设备驱动程序;或在同一台服务器上运行多个操作系统。
Docker 与 Kubernetes 如何集成?
Kubernetes 是一款用于管理 Docker 容器的开源系统。它负责部署容器、启动和停止容器、在需要时通过多实例对容器进行扩展,甚至在应用出现故障或无响应时自动重启容器。Docker 系统中的 Docker Compose 组件可处理小规模容器部署;而 Kubernetes 更适合扩展至数十、数百乃至数千个容器的场景。
Docker 在企业云战略中扮演什么角色?
Docker 容器非常适合在云端部署软件。这既包括运行在单个容器中的传统应用,也包括基于微服务的云原生应用 — 这类应用由数十个独立服务组成,每个服务运行在专属容器内。容器可以简化云端服务的开发和部署,提升企业应用的可扩展性、安全性、合规性、可测试性和可用性。Docker 和 Kubernetes 甚至还能充分提高云服务器的资源利用率,从而降低运行成本。
注:为免疑义,本网页所用以下术语专指以下含义: