返回顶部
首页 > 资讯 > 服务器 >Docker 镜像优化(从1.16GB到22.4MB)
  • 718
分享到

Docker 镜像优化(从1.16GB到22.4MB)

2024-04-02 19:04:59 718人浏览 独家记忆
摘要

目录第一步优化:使用轻量化基础镜像第二步优化:多阶段构建Docker 是一个供软件开发人员和系统管理员使用容器构建、运行和与分享应用程序的平台。容器是在独立环境中运行的进程,它运行在

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 文件等。关注公众号 逆锋起笔,回复 pdf,下载你需要的各种学习资料。

通过将 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 容器并不是提供网页(htmlCSSjavascript 文件、图片等)服务的最佳选择,最好的选择是使用像 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:最终容器的运行结果

到此这篇关于Docker 镜像优化(从1.16GB到22.4MB)的文章就介绍到这了,更多相关Docker 镜像优化 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Docker 镜像优化(从1.16GB到22.4MB)

本文链接: https://lsjlt.com/news/133418.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Docker 镜像优化(从1.16GB到22.4MB)
    目录第一步优化:使用轻量化基础镜像第二步优化:多阶段构建Docker 是一个供软件开发人员和系统管理员使用容器构建、运行和与分享应用程序的平台。容器是在独立环境中运行的进程,它运行在...
    99+
    2024-04-02
  • 怎么优化Docker镜像大小
    使用多阶段构建:在Dockerfile中使用多个阶段构建,将构建环境与运行环境分开,只将必要的文件复制到最终运行的镜像中,可以减...
    99+
    2024-04-02
  • Node.js项目中怎么优化docker镜像
    这篇文章给大家介绍Node.js项目中怎么优化docker镜像,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Node 项目简单写了一个自己用的 wechat-bot ,接下来就以这个项...
    99+
    2024-04-02
  • Docker镜像优化打包速度思考
    目录前言压缩镜像大小利用缓存加速打包速度Multi-stage BuildJava打包测试前言 当下主流的业务架构大部分会选择用容器进行部署,并结合一些容器编排技术k8s技术。由于...
    99+
    2023-05-19
    Docker镜像打包优化 Docker镜像打包
  • skywalking容器化部署docker镜像构建k8s从测试到可用
    目录前言碎语docker镜像构建application.ymlwebapp.ymlsetApplicationEnv.shsetWebAppEnv.shKubernetes中部署文末...
    99+
    2024-04-02
  • 多阶段构建优化Go 程序Docker镜像
    目录引言构建 Docker 镜像是否可以再减小 Docker 镜像的大小?引言 多阶段构建方式,是在 Dockerfile 中使用多个 FROM 指令,每个 FORM 指令都是一个新...
    99+
    2024-04-02
  • docker进阶教程之dockerfile优化镜像大小
    目录一、无优化构建镜像二、不需要输出的指令丢入/dev/null三、减少RUN构建四、多阶段构建五、使用更为轻量级的linux发行版本 总结一、无优化构建镜像 mkdir ...
    99+
    2022-11-13
    dockerfile 优化 docker修改镜像 docker 镜像大小
  • 如何从docker镜像里提取dockerfile
    今天小编给大家分享一下如何从docker镜像里提取dockerfile的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。从镜像中...
    99+
    2023-07-02
  • 优化Docker镜像大小常见方法有哪些
    本篇内容主要讲解“优化Docker镜像大小常见方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“优化Docker镜像大小常见方法有哪些”吧!手动管理我们能...
    99+
    2024-04-02
  • 优化Docker镜像安全性的技巧有哪些
    这篇文章主要为大家展示了“优化Docker镜像安全性的技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“优化Docker镜像安全性的技巧有哪些”这篇文章吧。1前言当你是刚开始使用 Dock...
    99+
    2023-06-29
  • Docker容器从镜像恢复的方法
    这篇文章主要介绍了Docker容器从镜像恢复的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。查看所有容器:docker container ls&nb...
    99+
    2023-06-14
  • Docker如何拉取镜像到本地
    这篇文章将为大家详细讲解有关Docker如何拉取镜像到本地,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。拉取镜像到本地docker tag <镜...
    99+
    2024-04-02
  • docker怎么导出镜像到本地
    要导出 Docker 镜像到本地,可以使用 `docker save` 命令。以下是导出镜像到本地的步骤:1. 打开终端或命令提示符...
    99+
    2023-10-09
    docker
  • 优化Docker镜像安全性的12个技巧总结
    目录1前言2避免泄露构建密钥多阶段构建BuildKit的密钥 题外话:不要推送在开发机上构建的镜像3以非root用户身份运行4使用最新的基础镜像构建和更新系统包背景知识6对...
    99+
    2024-04-02
  • Docker镜像发布到Docker Hub的实现方法
    目录一、Docker 官网注册一个账号,新建仓库二、制作镜像,保存修改后的容器镜像为例三、镜像上传四、镜像下载在使用docker过程中,往往会用到镜像仓库,方便管理的同时也方便在其他...
    99+
    2024-04-02
  • 利用Docker SDK从文件中导入镜像
    IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天编程网给大家整理了《利用Docker SDK从文...
    99+
    2024-04-04
  • 怎么部署Docker镜像到SAP Cloud Platform
    本篇内容介绍了“怎么部署Docker镜像到SAP Cloud Platform”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一次尝试,我遇...
    99+
    2023-06-04
  • 服务器磁盘镜像的进化:从磁带到云端
    随着数据量的爆炸式增长和数字化转型的加速,维护服务器上至关重要的数据的完整性和可用性变得至关重要。服务器磁盘镜像技术在这一过程中发挥着至关重要的作用,它将服务器磁盘上的数据创建出精确的副本,以实现数据保护和灾难恢复。 磁带时代:早期备份...
    99+
    2024-03-04
    磁带备份 云端备份 服务器镜像 灾难恢复 数据保护
  • Node服务如何进行Docker镜像化
    本文小编为大家详细介绍“Node服务如何进行Docker镜像化”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node服务如何进行Docker镜像化”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。以一个例子开头,大...
    99+
    2023-07-04
  • 从docker镜像里提取dockerfile的两种方法
    目录前言从镜像中提取dockerfile的两种方法1、history参数2、dfimage补充:如何设置永久的别名总结前言 hello,大家好,今天在玩docker的时候发现了很好用的东西,他就是用来提取镜像中的dockerfile的。这个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作