欢迎访问天云祥南京服务外包      联系人:洪胜      服务热线:4008875538      电话:13530954096 (微信号)
天云祥南京呼叫中心
洪胜 13530954096

南京为什么要优化Dockerfile。md公司

发布时间:2022-06-10 09:01:45 人气:1794 来源:天云祥客服外包

听取我们的杰出工程师蒂莫西·塞缪尔(TimothySamuel)讲述他最近参加Dockerfiles动手日的经历,以及这与我们在EdApp的工作有何关系。

作者Timothy Samuel

几周前,我有机会参加了AWS悉尼办事处在Docker举行的动手日活动,介绍了AWS中的容器生态系统,以及为什么要将单片应用程序移动到微服务。在活动期间,演示者提到,虽然docker文件非常容易启动和运行,但大多数人可能无法实现可以改进docker build运行时的简单优化。下面我将介绍docker的主要组件,并介绍我们在实现这些改进方面的经验,这些改进虽然小,但非常强大!

1。Docker容器简介Docker容器提供了一种将应用程序代码及其所有依赖项打包到单个映像中的方法,以便此映像可以在任何环境中快速可靠地运行。

2。什么是Dockerfile?要创建docker容器,您需要将所有指令放置在Dockerfile中。此Dockerfile是一个简单的文本文档,包含构建图像的所有命令。然后,通过在终端中运行以下命令来创建图像。这里指定了-t标志,它用标志后面提供的名称标记图像,在本例中是我的应用程序。

的。表示Dockerfile所在的当前目录。​

Docker的工作前提是从一个基础开始,然后在一个新层中应用每个后续指令,每个新层都会被缓存。您可以在下面构建docker容器时打印到终端的结果中看到这一点。缓存加快了构建时间,因为Docker在没有更改的情况下重用相同的缓存层。​

3。docker文件

的一般结构每当您创建docker映像时,通常都会有一些与下面类似的说明。

从节点的预生成映像开始:10执行一些设置设置设置工作目录WORKDIR my app/设置环境变量ENV node\u ENV dev将源文件复制到映像副本。/。安装依赖项RUN Thread Install RUN your application设置应用程序的入口点入口点[“Thread”,“start”]设置一些可选参数CMD[“-o”]所有Dockerfile内容都与下面的代码段相同。

在构建docker映像时,(通过运行上述命令),您将看到一些典型的输出,如下所示。

这是一个成功–您已经构建了自己的形象!

4。一个常见的错误是,顶部的Dockerfile指令将始终有效,这很好,因为我们需要确保我们都能修复bug,添加新功能,并且我们的docker映像将继续成功构建和运行。​ 遇到的一个问题是,每次源文件更改时,构建Docker映像时发生的构建时间较长。更改通常在内发生多次,对于每次更改,您将测试新功能是否按预期工作,或者错误是否已修复。​ 在大多数情况下,初始指令和应用程序依赖关系不会改变。理解这一点非常重要,因为这是常见的错误,而导致重大改进的微小变化就在哪里。记住上面Dockerfile的内容。

从第4条指令开始,我们告诉Docker将整个应用程序内容复制到映像,完成后安装依赖项,然后运行应用程序。随着源代码的不断更改,Docker将意识到这个COPY命令中已经发生了更改,并且不再使用以前的缓存层。此外,此复制命令后面的所有指令都不会使用缓存,因为最后一层已更改,并且每个指令都需要再次运行。这将包括刚刚安装了所有依赖项的层,这将需要再次运行。5、由小变大如前所述,我们需要改进复制整个应用程序然后安装依赖项的步骤。尤其是安装依赖项通常需要大量的构建时间。为了缩短构建时间,我们将COPY命令分为两部分,并重新排列install命令:

前两个COPY命令将复制具有所有应用程序依赖项的文件。现在,我们将运行install命令,以安装所有依赖项。第二个COPY命令将复制其余的应用程序源代码。一旦我们做了这些相关的更改,Dockefile中上面显示的两行将更改为下面显示的内容。

一旦这些更改用于构建docker映像,在依赖关系未更改的每个后续docker构建都将具有与下面类似的输出。

您会意识到,在指令复制其余源代码之前(步骤7),Docker正在使用以前构建中的缓存层,因为在应用这些指令时没有做任何更改,这会导致构建时间显著缩短。

6。我们自己的经验是,在我们的CI/CD管道中,我们意识到我们正在做同样的事情:

复制我们的整个源代码,包括安装运行我们的应用程序的依赖项的依赖项文件​ 特别是对于我们的一幅docker图像:~ 6分钟是构建图像所需的平均时间~ 2分钟是进行小改进后所需的平均时间​ 这使构建时间减少了66%,对于我们的CI/CD管道来说,每天都在处理许多构建。一旦开始计算这些数字,您就会意识到,安装依赖项通常都没有改变,而这是浪费了大量时间。结论启动并运行个Dockerfile非常简单,不需要太多努力。一旦你开始加速并拥有更快的速度,多个团队一起修复bug/创建新功能,你就必须开始考虑这些小的改进。尤其是当您有一个CI/CD管道,用于构建docker映像,并针对更新的应用程序功能运行测试,以验证应用程序是否仍按预期运行时。

有兴趣加入EdApp团队吗?在EdApp,我们不断思考新想法和实施最新技术的更佳方法。我们拥有一支充满激情和才华横溢的开发团队,我们很乐意与您分享我们的旅程!如果您想了解更多与我们合作的信息,请访问我们的职业页面或联系careers@edapp.com.

策划的课程示例10敏感性培训课程10坠落防护培训课程前10名免费受限空间课程“KDSP

最近更新

客户服务
live chat
点击这里给我发消息