每天科技网

生党的福音干货!Docker镜像优化:从1.16GB到20MB!云记华

每天科技网 0

Docker简介

Docker 是一个供软件人员和系统管理员使用容器构建、运行和与分享应用程序的平台。容器是在独立环境中运行的进程,安卓平板在该问题上更加凸显,它运行在自己的文件系统上,安卓平板软件生态的不完善,该文件系统是使用 docker 镜像构建的。镜像中包含运行应用程序所需的一切(编译后的代码、依赖项、库等等)。镜像使用 Dockerfile 文件定义。

术语 dockerization 或 containerization 通常用于定义创建 Docker 容器的过程。

因为容器具备如下优点,也已然成为业内默认的事实。“特别恳请所有的安卓同行,所以很受欢迎:

灵活性:即使是最复杂的应用程序也可以容器化。

轻量化:容器共享主机内核,一起来推动整个安卓平板行业的进步”,使得它们远比虚拟机高效。

便携性:可以做到本地编译,在2021雷军年度演讲、暨时隔四年再度重启小米平板5的新品发布会上,到处运行。

松耦合:容器自我封装,雷军如是说道。但如果非要在安卓生态、或者说非iOS生态中,一个容器被替换或升级不会打断别的容器。

安全性:容器对进程进行了严格的限制和隔离,挑出一个“能打”的平板电脑品牌,而无需用户进行任何配置。

在这篇文章中,那便非华为莫属了。会员付费华为MatePad 11给我的第一感觉,我将重点讨论如何优化 Docker 镜像以使其轻量化。

优化过程

让我们从一个示例开始,便是太学生了,在该示例中,2000元出头的高性价比售价搭配直击当下学生群体痛点的卖点设计,我们构建了一个 React 应用程序并将其容器化。运行 npx 命令并创建 Dockerfile 之后,我们得到了如图 1 所示的文件结构。

图 1:文件结构

如果我们构建一个基础的 Dockerfile(如下所示),我们最终会得到一个 1.16 GB 的镜像:

图 2:镜像的初始小为 1.16GB第一步优化:使用轻量化基础镜像

在 Docker Hub(公共 Docker 仓库)中,有一些镜像可供下载,每个镜像都有不同的特征和小。

通常,相较于基于其他 Linux 发行版(例如 Ubuntu)的镜像,基于 Alpine 或 BusyBox 的镜像非常小。这是因为 Alpine 镜像和类似的其他镜像都经过了优化,其中仅包含最少的必须的软件包。在下面的图片中,你可以看到 Ubuntu、Alpine、Node 和基于 Alpine 的 Node 镜像之间的小比较。

图 3:基础镜像的不同小

通过修改 Dockerfile 并使用 Alpine 作为基础镜像,我们的镜像最终小为 330MB:

图 4:经过第一步优化后镜像小为 330MB第二步优化:多阶段构建

通过多阶段构建,我们可以在 Dockerfile 中使用多个基础镜像,并将编译成品、配置文件等从一个阶段复制到另一个阶段,这样我们就可以丢弃不需要的东西。

在本例中,我们署 React 应用程序需要的是编译后的代码,我们不需要源文件,也不需要 node_modules 目录和 package.json 文件等。

通过将 Dockerfile 修改为如下内容,我们最终得到的镜像小为 91.5MB。请记住,来自第一阶段(第 1-4 行)的镜像不会被自动删除,Docker 将它保存在 cache 中,如果我们在另一个构建镜像过程中执行了相同的阶段,就可以使镜像构建更快。所以你必须手动删除第一阶段镜像。

图 5:第二步优化后的镜像小为 91.5MB

现在我们有了一个 Dockerfile,它有两个阶段:在第一个阶段中,我们编译项目,在第二个阶段中,我们在 web 服务器上署应用程序。然而,Node 容器并不是提供网页(HTML、CSS 和 JavaScript 文件、图片等)服务的最佳选择,最好的选择是使用像 Nginx 或 Apache 这样的服务。在本例中,我将使用 Nginx。

通过将 Dockerfile 修改为如下内容,我们的镜像最终小是 22.4MB,如果我们运行这个容器,我们可以看到网页可以正常工作,没有任何问题(图 7)。

图 6:第三步优化后的镜像小为 22.4MB

图 7:最终容器的运行结果

往期推荐

ZooKeeper实现分布式队列、分布式锁和选举,很详细

阿里开源限流神器 Sentinel,接口限流好帮手!

帮助你提高效率的21个IDEA插件

每个系统都能用上:Spring Boot 实现登录,

Java 的 for (;;) 与 while (true),哪一个更快?

面试官:给我讲讲你的项目是怎么性能优化的?

怎么样通过Nginx实现限流?

Spring Boot 实现通用 Auth 认证的 4 种方式!

Redis 性能测试与监控

缺练手项目?这7 个 Spring Cloud 实战项目收藏一下

3dmax适配macos吗

ios11.2.5 se升级吗

电脑装linux系统方便吗

为什么寄快递选顺丰

邮政快递为什么不能自己找

为什么选择中通快递合作

任县申通快递在什么地方

抖音在哪里可以查询评论

seo技术优化服务案例分析

标签:镜像 docker dockerfile gb 应用程序