什么是 Docker?为什么它如此受欢迎?

2025-06-10

什么是 Docker?为什么它如此受欢迎?

最初发表于Raygun 博客

如果您在过去五年中一直从事 IT 行业,那么您很可能听说过容器平台Docker。Docker和容器是一种全新的软件运行方式,正在彻底改变软件开发和交付。

什么是 Docker?

Docker 是一项新技术,允许开发团队在任何地方构建、管理和保护应用程序。

如果不解释什么是容器,就不可能解释什么是 Docker,所以让我们快速了解一下容器及其工作原理。

容器是一种与其他进程隔离的特殊进程。容器被分配了其他进程无法访问的资源,并且容器也无法访问任何未明确分配给它们的资源。

那么这有什么大不了的呢?

未“容器化”的进程可以向操作系统请求访问磁盘上的任何文件或任何网络套接字。

在容器广泛应用之前,并没有可靠且有保障的方法将进程隔离到其专属的资源集合中。正常运行的容器绝对无法触及其资源“沙箱”之外未明确分配给它的资源。

例如,在同一台计算机上运行的两个容器,就像位于两台完全不同的计算机上,彼此相距数英里一样。它们是完全且有效地彼此隔离的。

这种隔离有几个优点:

  • 两个容器化进程可以在同一台计算机上并行运行,但不能互相干扰。

  • 除非明确配置,否则他们无法访问彼此的数据。

  • 两个不同的应用程序可以在同一硬件上运行容器,并确信其流程和数据是安全的。

  • 共享硬件意味着更少的硬件。一家公司需要数千台服务器来运行应用程序的时代已经一去不复返了。这些硬件可以在不同的业务部门或完全不同的企业客户之间共享。这将为私人和公共中心带来巨大的规模经济效益。

Docker 详解

现在您已经了解了什么是容器,让我们来了解一下 Docker。

Docker 既是一家公司,也是一款产品。Docker Inc. 开发了容器工具包 Docker。

容器并非一项单一的技术。它是一系列经过十多年发展的技术的集合。Linux 的功能(例如命名空间和 cgroup)已经存在很长时间了——大约从 2008 年就开始了。

那么,为什么一直以来都没有使用集装箱呢?

答案是,很少有人知道如何制作它们。只有最强大的 20 级 Linux 系统开发人员战士法师 (Warrior Mage) 才了解创建容器所需的各种技术。

在早期,想要理解容器本身就已经是一件非常复杂的事情,更不用说创建容器了。风险很高——一旦出错,容器的优势就会变成劣势。

如果容器不包含,它们可能会成为最新 Hacker News 安全漏洞头条的根本原因。

在容器成为主流之前,大众需要一致、可靠的容器创建。

进入 Docker 公司。

Docker 的主要特性包括:

  • Docker 命令行界面 (CLI)
  • Docker引擎

Docker 通过“包装”底层操作系统系统调用的复杂性,简化了容器的创建。毫不夸张地说,Docker 的受欢迎程度呈滚雪球式增长。

2013年3月,Docker的创始人dotCloud更名为Docker Inc.,并将Docker开源。短短几年间,容器技术从默默无闻发展成为行业变革的引擎。Docker的影响力堪比21世纪初虚拟机的诞生。

Docker 有多受欢迎?

以下是过去五年内“docker”一词的搜索谷歌趋势图:

Google 趋势 Docker

您可以看到,自 2013 年推出以来,Docker 的 Google 搜索量一直保持稳定增长。Docker 已成为容器化领域的事实标准。虽然也有一些竞争产品,例如CoreOS/rkt,但它们在普及度和市场认知度方面远远落后于 Docker。

最近,微软宣布 Windows 10 和 Windows Server 2016 均支持 Docker,Docker 的受欢迎程度进一步提升。

Docker为何如此受欢迎以及容器为何兴起?

Docker 之所以受欢迎,是因为它为软件交付和部署带来了无限可能。许多常见的问题和低效之处都可以通过容器解决。

Docker 受欢迎的主要原因如下。

1.易于使用

Docker 之所以如此受欢迎,很大程度上是因为它的易用性。Docker 很容易上手,这主要归功于它提供了大量资源来学习如何创建和管理容器。Docker 是开源的,因此你只需要一台支持 VirtualBox、Mac/Windows 版 Docker 或原生支持容器的操作系统(例如 Linux)的电脑即可开始使用。

2. 系统扩展速度更快

容器技术能够用更少的计算硬件完成更多工作。在互联网早期,网站扩展的唯一途径是购买或租赁更多服务器。普及的成本与扩展的成本成线性关系。热门网站最终沦为自身成功的牺牲品,不得不花费数万美元购买新硬件。容器技术让数据中心运营商能够将更多工作负载塞进更少的硬件中。共享硬件意味着更低的成本。运营商可以将这些利润收入囊中,或者将节省下来的资金回馈给客户。

3. 更好的软件交付

使用容器进行软件交付也更加高效。容器具有可移植性,并且完全独立。容器包含一个独立的磁盘卷。该卷会随着容器的开发和部署到各种环境而随附。软件依赖项(库、运行时等)也随容器一起提供。如果容器在您的计算机上运行良好,那么它在开发、预发布和生产环境中的运行方式也相同。容器可以消除部署二进制文件或原始代码时常见的配置差异问题。

4.灵活性

容器化应用程序的运行比非容器化应用程序更加灵活、更具弹性。容器编排器可以处理数百甚至数千个容器的运行和监控。

容器编排器是管理大型部署和复杂系统的强大工具。目前唯一比 Docker 更流行的或许是Kubernetes,它是目前最流行的容器编排器。

5.软件定义网络

Docker 支持软件定义网络。Docker CLI 和引擎允许运维人员为容器定义隔离的网络,而无需接触任何路由器。开发人员和运维人员可以设计具有复杂网络拓扑的系统,并在配置文件中定义网络。这也带来了安全方面的优势。应用程序的容器可以在隔离的虚拟网络中运行,并严格控制入口和出口路径。

6. 微服务架构的兴起

微服务的兴起也促进了 Docker 的流行。微服务是一些简单的函数,通常通过 HTTP/HTTPS 访问,只做一件事,并且做得很好。

软件系统通常以“单体”的形式开始,单个二进制文件支持许多不同的系统功能。随着系统规模的扩大,单体会变得难以维护和部署。微服务将系统分解为更简单的功能,可以独立部署。容器是微服务的绝佳宿主。它们功能齐全、易于部署且高效。

你应该使用 Docker 吗?

回答这样的问题几乎总是需要谨慎和周全。没有一种技术是万能的。每种技术都有其缺点、利弊和注意事项。

说了这么多...

是的,使用 Docker。

我对这个答案做了一些假设:

  1. 您开发分布式软件的目的是从基础设施中挤出每一个处理能力和 RAM 字节。

  2. 您正在设计针对高负载和高性能的软件,即使您还没有高负载或不需要最佳性能。

  3. 您希望实现快速部署并获得其带来的优势。如果您渴望在软件交付中实践 DevOps,那么容器是您的一大关键工具。

  4. 您要么想要容器的优势,要么需要容器,或者两者兼而有之。如果您已经运行高负载、分布式、单体式或微服务应用程序,那么您需要容器。如果您渴望有一天运行这些高负载、高性能的应用程序,那么现在是时候开始使用容器了。

何时不应使用 Docker 或容器

在容器中开发、部署和操作软件与传统的开发和交付有很大不同,其中不乏艰辛和考验。

需要考虑以下权衡:

如果您的团队需要大量培训

团队现有的技能组合是重要的考量因素。如果您缺乏时间或资源来缓慢地推进容器技术,或者缺乏聘请咨询合作伙伴来帮助您快速上手,那么您应该等待。容器的开发和运维并非“边做边想”的事情,除非您行动非常缓慢且谨慎。

当你有高风险状况时

您的风险状况是另一个重要的考虑因素。如果您身处受监管的行业或运行着创收型工作负载,请务必谨慎使用容器。使用容器编排器大规模运行容器与非容器化系统截然不同。容器的优势也伴随着交付、运行和监控容器的系统的额外复杂性。

如果你无法聘请人才

尽管 Docker 广受欢迎,但它仍然是一种非常新颖的软件开发和交付方式。其生态系统瞬息万变,精通 Docker 的工程师数量仍然相对较少。在早期阶段,许多公司选择与企业 ISV 合作伙伴合作,以开始使用 Docker 及其相关系统。如果您不打算这样做,则需要权衡自行使用 Docker 的成本与潜在的收益。

考虑系统的复杂性

最后,考虑一下你的整体需求。你的系统是否足够复杂,足以承担容器化的额外负担?例如,如果您的业务以创建静态网站为中心,那么你可能根本不需要容器。

总而言之,Docker 之所以受欢迎,是因为它彻底改变了开发

Docker 及其所实现的容器彻底改变了软件行业,在短短五年内,它们作为一种工具和平台的受欢迎程度飙升。

主要原因是容器能够创造巨大的规模经济效益。过去需要昂贵专用硬件资源的系统现在可以与其他系统共享硬件。另一个原因是容器自包含且可移植。如果一个容器在一台主机上运行良好,那么在另一台主机上也能同样运行,只要该主机提供兼容的运行时。

重要的是要认识到,Docker 并非万能药(没有哪项技术是万能的)。规划技术战略时,需要考虑各种权衡利弊。迁移到容器并非易事。

在选择基于 Docker 的策略之前,请权衡利弊。仔细权衡容器化的利弊,很可能会促使您选择 Docker。如果这些因素都得到充分考虑,Docker 和容器技术将有可能为您的企业带来新的机遇。

想知道如何监控微服务的性能问题吗?Raygun APM、真实用户监控和崩溃报告功能的设计充分考虑了现代开发实践。了解 Raygun 平台如何帮助您保持容器的高性能。

鏂囩珷鏉ユ簮锛�https://dev.to/raygun/what-is-docker-and-why-is-it-so-popular-45c7
PREV
Blooket 技巧:主宰每款游戏的技巧和窍门 Blooket 教育游戏
NEXT
历史上最昂贵的 11 个软件错误