软件开发是一个每年都在发展的过程,但业界很少有东西像 Docker 这样成为标准。自 2013 年公开发布以来,Docker 一直用于开发、交付和运行应用程序。时至今日,它仍是许多经验丰富的开发人员使用的软件开发的重要组成部分。在本文中,我们将介绍 Docker 到底是什么、使用它的优缺点以及它的实际工作原理。
什么是Docker?
Docker是一个开源容器化平台,可独立于本地或主机基础设施开发、运送和运行应用程序。它是一个创建和管理容器的平台,这些容器彼此隔离但可以通过定义的通道相互通信。Docker 之所以成为流行的 PaaS,是因为容器的概念,容器使用的资源比 VM 少。
什么是容器,它们解决什么问题?
在详细说明 Docker 的功能之前,让我们先了解它的组件。所有应用程序和程序都是为在特定环境中运行而开发的。这些环境要么具有应用程序所需的库或工具,要么运行应用程序兼容运行的软件版本。
容器就是这样的环境,包括应用程序运行的所有库和工具。容器的作用是将这些应用程序与应用程序的库和工具一起打包在容器中,这样它就可以在任何地方运行,而不必依赖宿主的环境。
这是一个简单的类比:
宜家出售需要自行组装的家具。但是,他们怎么知道所有客户都有组装家具的工具呢?他们没有。宜家将工具与家具一起运送,因此世界各地的任何客户都可以在宜家包裹到达他们家门口的那一刻就开始安装。
这基本上就是容器的工作方式,使开发和交付软件更加容易。通过在容器环境中包含所有必要的工具,开发人员不必再担心与不同服务器或主机的不兼容问题。另一个经常与容器一起出现的术语是微服务。
Docker 做什么?
Docker 只是一个管理这些容器的平台,因此您可以轻松构建不同的特定环境。Docker 平台让开发人员和程序员可以在整个工作空间中无缝地使用容器。无论您是内部团队还是成员遍布世界各地的远程团队,使用 Docker 来运送和运行容器都是一种更高效地构建软件的低成本方式。 但是除了方便之外,使用 Docker 还有很多好处。我们将在本文后面详细讨论容器化如何更快、更安全并且更适合扩展。
Docker解决了什么?
Docker 解决了自己创建容器并在整个团队中管理它们的问题。当您想要优化开发过程的工作流程时,这一点变得尤为重要。
使用 Docker 的优缺点
除了管理方面,Docker 还解决了许多其他复杂、艰巨的问题。
以下是使用 Docker 的主要优势
- 可靠性。使用 Docker 进行容器化可确保您的应用几乎可以在安装了 Docker 的任何地方运行。您不必担心版本不兼容或手动安装依赖项。
- 效率。软件开发的一个巨大瓶颈是当应用程序或软件在没有环境的情况下在计算机中崩溃时。通过使用容器,您可以摆脱这些瓶颈并简化工作流程以专注于开发软件,而不会因安装依赖项而分心。
- 可扩展性。可以选择快速创建新容器并部署它们可以更快地为您的软件打补丁或更新。与通常意味着构建到现有代码然后重新启动它以更新程序的整体式编程不同,容器让您可以独立地在彼此之上构建。这意味着您可以在不损坏其他容器及其功能的情况下添加和删除容器,从而更轻松地扩展您的软件。
- 无障碍。使用容器,软件维护的例行检查和优化过程也更容易。由于容器彼此独立工作,您可以配置、更新和部署容器,而无需关闭或干扰其他容器。这使得容器易于访问。
- 轻的。容器是需要操作系统才能运行的虚拟机的轻量级替代方案。容器通过共享主机的资源(如 RAM 和 CPU)而不是需要专用资源(即使未使用)的虚拟机来避免这样做。
- 版本自由。由于容器彼此隔离,您可以使用最新版本的 JavaScript 运行一个容器,而另一个容器运行旧版本。每种语言都没有完美的版本,程序员对某些版本比其他版本更熟悉。通过容器在不破坏其他代码行的情况下拥有使用任何版本的创造性自由,使您的软件更加通用。
没有什么是完美的,Docker 也远非万能的一站式解决方案。该平台确实有其自身应注意的缺点。
使用 Docker 的缺点
- 陡峭的学习曲线。尽管 Docker 方便快捷,但不可否认要精通该平台需要一定的学习曲线。您不会在一夜之间成为使用 Docker 的高手,您可以预期您的团队成员也会遇到同样的困难。如果您需要对 Docker 引擎进行维护或定制,您还必须了解 Linux。
- 平台到平台的通信。尽管容器可以无缝地相互对话,但在这个领域工作的公司并不总是意见一致。竞争对手的集装箱公司并不经常相互合作,如果您想扩展您正在使用的技术,这可能会破坏交易。
- 临时容器。一旦容器的使用结束,例如当它完成一个进程并且不再使用时,容器将与其处理的所有数据一起关闭。除非您使用卷将数据存储到 Docker 引擎,否则不会保存数据。这不一定是坏事,但对于您的软件开发过程来说却是值得注意的事情。Docker 对此还没有自动化的解决方案。
- 命令行界面。Docker 的界面类似于命令行,这使其成为运行需要图形界面的应用程序的糟糕选择。它主要针对通过终端上的命令运行的应用程序和程序进行了优化。
最后,新公司在使用 Docker 时面临的一个常见问题是,他们在不了解如何首先设计和编排开发架构的情况下尝试使用它。Docker 并不是一个放之四海而皆准的平台,有些程序没有它会更好。
Docker 是如何工作的
Docker 在客户端-服务器的基础上工作。您所看到的 Docker 客户端与负责执行和管理任务的 Docker 守护进程对话。
Docker的核心组件和架构
除此之外,还有更多来自 Docker 的功能,它们可以提供不同的功能。今天,我们只关注 Docker 的四个核心组件。
Docker客户端
Docker 客户端是您与 Docker 守护进程之间的接口。这是您输入命令、运行程序以及主要与 Docker 交互的地方。
码头守护进程
守护进程负责管理 Docker 平台上的所有内容,无论是映像、容器、卷还是网络。简单来说,这是您整个 Docker 操作背后的策划者。您通过客户端发送的所有命令都由守护程序处理并由其管理。守护进程也可以与来自其他服务器的守护进程连接。
Docker登记处
Docker 注册表是一个开源系统,您可以在其中存储和下载 Docker 映像。您甚至可以在与同事共享的工作区中设置私人注册表。
Docker图像
Docker 镜像是只读文件,其中包含创建 Docker 容器的说明。简单来说,它就像一个蓝图,告诉 Docker 守护进程运行什么环境。这是使容器创建变得更容易和更快的部分原因。结合 Docker 注册表,您可以找到公开可用的图像预设,甚至可以为您的同事创建自定义图像供您的同事使用。
Docker 或 Kubernetes
Docker 和容器化的新手经常问的一个问题是“Docker 和 Kubernetes 哪个更好?”答案非常简单:两者都有。
什么是 Kubernetes?
Kubernetes是谷歌开发的用于管理部署自动化和容器化服务的系统。它旨在处理和管理成百上千的容器,并优化这些容器之间的协作方式。Kubernetes 通过为特殊功能构建的节点来实现这一点。
这些节点可以分为两类:主力节点和头节点。主力节点负责任何计算并完成所有繁重的工作。这需要比头节点更多的资源。另一方面,头节点负责分配任务和接收最终输出。 简而言之,Kubernetes 是用来管理和优化容器之间的整个工作流程的,这与 Docker 有很大的不同。
Docker 和 Kubernetes 有什么区别?
Docker 是一个构建、运送和运行容器的容器化平台。它是一个平台,可让您像部署容器一样轻松地构建容器。相比之下,Kubernetes 更注重容器管理和效率。它处理大量容器并优化它们以通过节点更快地工作。
行动后报告——你应该使用 Docker 吗?
那么,你应该为你的软件使用 Docker 吗?这得看情况。如果您需要经常移植您的环境,Docker 通常会对您的开发过程产生最大的影响。使用 Docker 的下一个最大考虑因素是,如果您正在与必须不断来回测试您的应用程序的大型团队合作。在需要在不同计算机上运行应用程序的开发人员和运营经理之间工作的团队会发现 Docker 是救星。