容器的卖点之一是容器化应用程序的部署速度通常比虚拟机快,且性能更佳。
虽然容器的默认速度比其他基础设施快,这并不意味着没有办法让它们更快。本文将演示如何通过优化 Docker 容器镜像构建时间、性能和资源消耗,来让容器的速度与性能更超默认值一步。
在我们深入探讨 Docker 优化技巧之前,先容我先解释一下“更快”容器的含义。
在关于 Docker 的讨论中,“更快”这个单词可以有多种含义。它可以指在容器中运行的进程或应用程序的执行速度,可以指镜像生成时间,它可以指部署应用程序所需的时间,或通过整个交付管道推送代码的时间。
在这篇文章中,我将从多个角度讨论可以使 Docker 更快的多种方法。
以下策略可以帮助您让 Docker 容器变得更快。
1、采取最小化的方法进行镜像处理
镜像中的代码越多,生成镜像所需的时间越长,用户下载镜像的时间也就越长。此外,由于消耗的资源多于所需资源,代码繁多的容器可能运行起来不够优化。
出于这些原因,您应该尽可能将您的容器镜像中的代码减少到镜像应该执行的操作的最低限度。
在某些情形下,设计简单的容器镜像可能需要您重新构建应用程序本身。不管是将它们部署在容器还是别的地方,臃肿的应用程序总是难免部署缓慢和性能低下。
在编写您的 Dockerfile 时,您还应该抵制住在不必要的情况下添加服务或命令的诱惑。比如说,如果您的应用程序不需要 SSH 服务器,则不要包含 SSH 服务器。再比如说,如果不是必须,则避免运行 apt-get upgrade。
2、使用极简操作系统
与虚拟机相比,容器的最大好处之一就在于容器不需要复制整个操作系统来托管应用程序。
为了充分利用这一特性,您应该使用一个操作系统托管您的镜像,且该操作系统应包含您所需的一切,除此之外再无其他。任何无法促进您 Docker 环境任务执行的服务或数据都应该被剔除。任何额外的东西都会导致系统臃肿,从而削弱您的容器的效率。
幸运的是,您不必自己动手为 Docker 构建您自己的操作系统。市场上有不少已预先构建的、轻量的 Linux 发行版来供您托管 Docker,例如 RancherOS。
3、优化构建时间
持续交付管道中最大的问题就是镜像构建所需的时间。当您需要等待很长时间才能构建 Docker 镜像时,可能会延迟整个交付过程。
加速镜像构建时间的一种方法是使用镜像仓库。通过减少在构建镜像时下载组件所需的时间,可以加快构建镜像的速度。
将多个运行命令组合成一个命令,也可以缩短镜像的构建时间,因为它减少了镜像中的层数,从而提高了构建速度,并优化了镜像大小。
Docker 的构建缓存特性是另一种提高构建速度的有效方法。缓存让您可以利用现有的缓存镜像,而无需从头构建每个镜像。
最后,正如上面所讨论的,构建极简的镜像也将加快构建时间。需要构建的越少,构建的速度就越快。
4、使用 CaaS (容器即服务)平台
对于许多组织的工作人员来说,快速高效地部署容器的最大障碍来自于构建和管理容器环境本身的复杂性。
这就是 CaaS (容器即服务)行之有效的原因。使用 CaaS,您可以获得预配置的环境以及部署和管理工具。CaaS 将有助于防止那些可能导致持续交付链变慢的瓶颈。
5、使用资源配额
默认情况下,每个容器可以消耗尽可能多的资源。然而某些情形下并不会总是这么理想,设计不良或产生故障的容器会消耗资源,造成其他容器运行缓慢。
为了防止出现这个问题,您可以在每个容器的计算、内存和磁盘 I/O 分配上设置配额。要记住,错误配置的配额也会导致严重的性能问题。因此,您需要确保您的容器能够访问它们所需的资源。
即使你的容器已经很快了,你也可以让它们更快。优化您的镜像,缩短镜像构建时间,避免操作系统膨胀,利用 CaaS 和设置资源配额,这些都是提高 Docker 环境的总体速度和效率的可行方法。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.