网易首页 > 网易号 > 正文 申请入驻

Docker镜像优化:从1.16GB到22.4MB

0
分享至

  作者 | The Agile Crafter

  策划 | 田晓旭

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

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

  因为容器具备如下优点,所以很受欢迎:

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

  轻量化:容器共享主机内核,使得它们远比虚拟机高效。

  便携性:可以做到本地编译,到处运行。

  松耦合:容器自我封装,一个容器被替换或升级不会打断别的容器。

  安全性:容器对进程进行了严格的限制和隔离,而无需用户进行任何配置。

  在这篇文章中,我将重点讨论如何优化 Docker 镜像以使其轻量化。

  让我们从一个示例开始,在该示例中,我们构建了一个 React 应用程序并将其容器化。运行 npx 命令并创建 Dockerfile 之后,我们得到了如图 1 所示的文件结构。

  
npx create-react-app app --template typescript

  图 1:文件结构

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

  
FROM node:10
WORKDIR /appCOPY app /appRUN npm install -g webserver.localRUN npm install && npm run build
EXPOSE 3000CMD webserver.local -d ./build

  图 2:镜像的初始大小为 1.16GB

  第一步优化:使用轻量化基础镜像

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

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

  图 3:基础镜像的不同大小

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

  
FROM node:10-alpine
WORKDIR /appCOPY app /appRUN npm install -g webserver.localRUN npm install && npm run build
EXPOSE 3000CMD webserver.local -d ./build

  图 4:经过第一步优化后镜像大小为 330MB

  第二步优化:多阶段构建

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

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

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

  
FROM node:10-alpine AS buildWORKDIR /appCOPY app /appRUN npm install && npm run build

FROM node:10-alpineWORKDIR /appRUN npm install -g webserver.localCOPY --from=build /app/build ./buildEXPOSE 3000CMD webserver.local -d ./build

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

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

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

  
FROM node:10-alpine AS buildWORKDIR /appCOPY app /appRUN npm install && npm run build

FROM nginx:stable-alpineCOPY --from=build /app/build /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]

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

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

  https://docs.docker.com/get-started/

  https://docs.docker.com/develop/develop-images/multistage-build/

  https://medium.com/the-agile-crafter/docker-image-optimization-from-1-16gb-to-22-4mb-53fdb4c53311

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
2-0!沙特队夺冠了!5场零失球强势登顶,剑指2027亚洲杯!

2-0!沙特队夺冠了!5场零失球强势登顶,剑指2027亚洲杯!

绿茵舞着
2026-10-08 22:05:59
女同事叫我帮她修电脑,我不小心当她面打开一个文件,她脸色变了

女同事叫我帮她修电脑,我不小心当她面打开一个文件,她脸色变了

白云故事
2025-07-10 12:05:06
开了两万公里电车后他悟了:普通家庭,真的适合老老实实买油车

开了两万公里电车后他悟了:普通家庭,真的适合老老实实买油车

音乐时光的娱乐
2026-09-28 15:03:10
民调显示:69%的乌克兰人准备支持沿当前战斗接触线立即停火

民调显示:69%的乌克兰人准备支持沿当前战斗接触线立即停火

地球记
2026-10-07 01:56:08
“宝马”停在小区泊位被撞,对方在车上留下纸条,除了车损,车主还希望赔偿“替代性交通费”“通讯费”

“宝马”停在小区泊位被撞,对方在车上留下纸条,除了车损,车主还希望赔偿“替代性交通费”“通讯费”

大风新闻
2026-10-08 10:13:07
欧洲球探点名王钰栋!不止一人,中国新星集体进入留洋视野

欧洲球探点名王钰栋!不止一人,中国新星集体进入留洋视野

晚雾空青
2026-10-08 14:52:22
地雷风波升级,金与正发声:野兽都不能进进出出

地雷风波升级,金与正发声:野兽都不能进进出出

中国新闻周刊
2026-10-07 16:43:44
比亚迪日本市场累计新车交付量突破一万台 车型为SEALION 6

比亚迪日本市场累计新车交付量突破一万台 车型为SEALION 6

太平洋汽车
2026-10-08 12:48:17
中国海警:允许菲方采取小艇过驳转运1名伤员

中国海警:允许菲方采取小艇过驳转运1名伤员

看看新闻Knews
2026-10-09 01:19:26
中国客机在温州瑞安坠毁,造成机上61人全部遇难,真是历史事件

中国客机在温州瑞安坠毁,造成机上61人全部遇难,真是历史事件

健康快乐丁
2025-08-05 16:01:39
iPhone 20:苹果直接跳过19,明年这台二十周年纪念机,变化大到离谱!

iPhone 20:苹果直接跳过19,明年这台二十周年纪念机,变化大到离谱!

明美无限
2026-10-08 20:20:46
从碾压安踏李宁,到月亏过亿:曾经的运动品牌顶流,到底错在哪?

从碾压安踏李宁,到月亏过亿:曾经的运动品牌顶流,到底错在哪?

三农老历
2026-10-03 11:12:46
兹维列夫登顶即危机?阿尔卡拉斯等群狼环伺,王座能坐稳吗

兹维列夫登顶即危机?阿尔卡拉斯等群狼环伺,王座能坐稳吗

野渡舟山人
2026-10-09 00:22:45
懂车帝:百公里刹车实验并非极端工况,刹车踏板力真实峰值1612N

懂车帝:百公里刹车实验并非极端工况,刹车踏板力真实峰值1612N

澎湃新闻
2026-10-08 22:20:29
年纪大了肌肉流失快?医生:吃这8种食物立刻补回,很多人不知道

年纪大了肌肉流失快?医生:吃这8种食物立刻补回,很多人不知道

美食店主
2026-10-03 08:16:30
不扒不知道,一扒吓一跳,27岁独居北京的王曼昱,私底下有多壕

不扒不知道,一扒吓一跳,27岁独居北京的王曼昱,私底下有多壕

林轻吟
2026-10-07 11:31:23
大胜63分,中国女篮挺进四强

大胜63分,中国女篮挺进四强

左右为篮
2026-10-09 00:35:24
真人长剧已死,电影将亡?国庆档票房缩水至2021年1/5,免费电影票无人赴约,网友发帖引爆全网

真人长剧已死,电影将亡?国庆档票房缩水至2021年1/5,免费电影票无人赴约,网友发帖引爆全网

火山詩话
2026-10-06 15:56:40
突然反转?高盛大摩花旗瑞银野村罕见一致:2027 年,中国房价大涨

突然反转?高盛大摩花旗瑞银野村罕见一致:2027 年,中国房价大涨

专业聊房君
2026-10-08 17:04:45
宏远速递!陈老板火速找新小外,全队抵达汕头,朱芳雨杜锋获名人堂提名

宏远速递!陈老板火速找新小外,全队抵达汕头,朱芳雨杜锋获名人堂提名

多特体育说
2026-10-08 20:53:48
2026-10-09 05:19:00
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
13026文章数 52094关注度
往期回顾 全部

科技要闻

江淮汽车回应"尊界V800刹车踏板支架断裂"

头条要闻

女局长被举报婚内出轨至少9人 大量亲密聊天记录公布

头条要闻

女局长被举报婚内出轨至少9人 大量亲密聊天记录公布

体育要闻

30天30队·鹈鹕:胖虎又一年“如果”

娱乐要闻

演员王晓慧刚担女主,就被曝已婚生子

财经要闻

央行:中国从不搞竞争性货币贬值

汽车要闻

特别版配色/碳纤尾翼 2027款深蓝L06将于10月9日上市

态度原创

健康
时尚
旅游
艺术
本地

痘坑留下后,还能填平吗?

西装+裙子,穿出大女人的浪漫与时髦

旅游要闻

接待游客249.48万人次,国庆假期潍坊文旅营收超1.8亿

艺术要闻

炸裂!龙门石窟首次发现造像琉璃眼珠,千年佛像竟“睁眼”了,熠熠闪光品相逆天!

本地新闻

转型再出发 奋勇打头阵

无障碍浏览 进入关怀版