什么是Docker?

Docker是一种新的虚拟化方法。如果您了解虚拟化,请跳过下一部分。如果没有,在我帮助您了解Docker之前,您需要对虚拟化有基本的了解。

什么是虚拟化?

 

让我们从一个比喻开始:假设你拥有一所房子。你有一个朋友需要一个地方说。如果你想帮助你的朋友,你有几个选择。

把你的朋友带到你的卧室。这可能会有点紧张。

在您的物业上为您的朋友建造一所新房子。这是一种昂贵的解决方案。

邀请你的朋友留在备用卧室。现在我们到了某个地方......

第三种选择非常好。你可以帮助你的朋友,而不是为他们建造新房子,但同时也要保持你的生活大多是分开的。您将分享一些共同的资源,如厨房和起居室,但您可以进入自己的卧室并关闭门以获得一些隐私。

虚拟化就像在你的备用卧室里安排你的朋友一样。想象一下,您想在计算机上运行Web服务器。您希望将其与您自己的操作系统和应用程序分开。为此,您可以运行包含Web服务器的虚拟机。它像一***立的计算机一样运行,但它使用计算机的处理器和RAM。启动虚拟机时,其整个操作系统将显示在操作系统内的窗口中。

Docker有什么不同?

Docker是一种不同的虚拟化方式。如果典型的虚拟机将操作系统与您正在运行的应用程序打包在一起,则Docker会在虚拟化系统之间尽可能多地共享。这使得它们在运行时使用更少的资源,并使它们更容易传送给其他开发人员或生产环境。

如果您正在自己学习Web开发,那么很难知道接下来应该学习什么。注册Rad Radon的免费辅导课程,我们将为您的网络开发事业提供后续步骤!

开发人员为什么要使用Docker?

Docker为Web开发人员提供了一些很酷的超级大国

轻松共享开发环境

如果您和我要在Node应用程序上进行协作,我们需要确保我们都安装了Node并且它们是相同的版本,以便我们的环境保持一致。我们可以跳过这个并希望最好,但它可能会导致我们可能难以缩小的问题。在不同版本的Node中,库和我们自己的代码有时会表现不同。

解决方案是确保我们都拥有相同版本的Node,但是,如果我们每个人在我们的系统上已经有其他需要其他版本Node的项目,我们可能会想要安装NVM,这样我们就可以切换Node版本容易。然后,我们可以将.nvmrc文件添加到项目的根目录,指定我们想要的通用版本。

我们只需要这样做一次,所以我们的工作现在已经完成。总而言之,这是我们必须做的事情:

确定节点版本。

安装NVM。

安装我们选择的Node版本。

将.nvmrc添加到项目目录,设置正确的节点版本。

启动应用程序。

它有效,但它很多。对于我们想加入这个项目的其他人,我们必须再次做大部分工作。即使我们采取了所有这些步骤,我们仍然无法保证所有开发人员的环境都是一样的。运行不同操作系统的开发人员甚至同一操作系统的不同版本之间的事情可能会中断。

Docker让我们通过为所有开发人员提供相同的开发环境来解决所有这些问题。相反,使用Docker,我们将采取以下措施:

安装Docker。

写一个Dockerfile。

跑docker build -t <image-name>。图像名称可以是您选择的任何名称。

跑docker run -p 3000:3000 <image-name>。“p”选项将容器端口映射到本地端口。这允许您在计算机上命中端口3000,该端口将映射到容器上的端口3000。使用与步骤3中相同的图像名称。

这似乎并不比Node / NVM设置简单得多(事实上并非如此)。它确实带来了优势。无论您的技术堆栈如何,您都只需要安装一次Docker 。当然,您只需要安装一次Node(除非您需要多个版本),但是,当您准备处理不同堆栈上的应用程序时,您需要安装所需的所有软件堆。使用Docker,您只需编写不同的Dockerfile(或Docker Compose文件,具体取决于应用程序的复杂程度)。

Dockerfile非常简单:它是一个名为“Dockerfile”的文本文件,没有扩展名。让我们看一下您可能用于简单Node应用程序的Dockerfile。

<span style="color:rgba(0, 0, 0, 0.843137)">
</span>
<span style="color:rgba(0, 0, 0, 0.843137)">
</span>
<span style="color:rgba(0, 0, 0, 0.843137)">
</span>
<span style="color:rgba(0, 0, 0, 0.843137)">
</span>

此Dockerfile是为侦听端口3000并从npm start命令启动的节点应用程序编写的。将此提交到您项目的存储库,并且新开​​发人员的入门变得非常简单并且100%一致:每个开发人员每次都获得相同的环境。

在与生产相同的环境中发展

在Docker开发环境中启动并运行应用程序后,您实际上可以将整个容器直接运送到生产环境。如果你认为这是处理两个开发商之间的矛盾痛苦,只是等待,直到你写你的机器上运行的代码只有把它不会在生产工作。这非常令人沮丧。

您有很多选项可以将Docker容器部署到生产环境中。以下是一些:

AWS ECS(官方教程)

数字海洋(教程)

Heroku(官方教程)

sloppy.io(官方教程)

我喜欢Heroku的方法,因为它是唯一一个允许你简单地用Dockerfile推送你的项目让它们运行的​​方法。其他人需要执行几个步骤,例如将Docker镜像推送到存储库。额外的步骤不是世界末日,但它们不是必需的。

更复杂的应用程序呢?

由于Docker的理念(每个容器一个进程),大多数应用程序将需要多个容器。例如,WordPress站点应该包含运行PHP的Web服务器的容器和MySQL数据库的容器。这意味着,您需要某种方式让容器进行交谈。这称为容器编排

如果您可以在单个主机上运行所有容器,Docker Compose可能会满足您的编排需求。它包含在您安装Docker时,它很容易学习。它允许您同时启动多个容器并在它们之间建立网络,以便它们可以相互通信。这是编排多个容器的最快捷,最简单的方法。

如果您需要协调分散在多个主机上的容器,Kubernetes是主流解决方案。许多支持Docker部署的主机都提供Kubernetes进行编排。

从了解Docker快速获胜

现在看起来似乎并不重要,但是当您第一次遇到由环境差异引起的问题时,请将此知识提交。你不会希望它再次发生。通过学习Docker,您将能够确保应用程序的一致环境,无论它在哪里运行或运行谁。这意味着您,您的客户和您的雇主可以依赖的一致结果

关注我更多干货奉上!