如何把优化Docker镜像大小

这篇具有很好参考价值的文章主要介绍了如何把优化Docker镜像大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是Docker

Docker是一个开源的虚拟化平台,可以让开发人员将应用程序和依赖项打包在轻量级容器中,然后可以轻松地在任何环境中运行。这样,开发人员可以将容器作为独立的可移植单元在不同的环境中部署和运行应用程序,而不用担心环境的差异会对应用程序的行为产生影响。例如,您可以使用Docker在开发环境中测试应用程序,然后将容器部署到生产环境中运行。总之,Docker可以让开发人员更轻松地创建、部署和运行应用程序。

  • 灵活性:即使是最复杂的应用程序也可以容器化。
  • 轻量化:容器共享主机内核,使得它们远比虚拟机高效。
  • 便携性:可以做到本地编译,到处运行。松耦合:容器自我封装,一个容器被替换或升级不会打断别的容器。
  • 安全性:容器对进程进行了严格的限制和隔离,而无需用户进行任何配置。

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

优化过程

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

npx create-react-app app --template typescript

如何把优化Docker镜像大小

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

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

如何把优化Docker镜像大小

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

在 Docker Hub(公共 Docker 仓库)中,有一些镜像可供下载,每个镜像都有不同的特征和大小。
通常,相较于基于其他 Linux 发行版(例如 Ubuntu)的镜像,基于 Alpine 或 BusyBox 的镜像非常小。这是因为 Alpine 镜像和类似的其他镜像都经过了优化,其中仅包含最少的必须的软件包。
在下面的图片中,你可以看到 Ubuntu、Alpine、Node 和基于 Alpine 的 Node 镜像之间的大小比较。

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

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

如何把优化Docker镜像大小

第二步优化:多阶段构建

通过多阶段构建,我们可以在 Dockerfile 中使用多个基础镜像,并将编译成品、配置文件等从一个阶段复制到另一个阶段,这样我们就可以丢弃不需要的东西。
我们部署 React 应用程序需要的是编译后的代码,我们不需要源文件,也不需要 node_modules 目录和 package.json 文件等。
通过将 Dockerfile 修改为如下内容,我们最终得到的镜像大小为 91.5MB。请记住,来自第一阶段(第 1-4 行)的镜像不会被自动删除,Docker 将它保存在 cache 中,如果我们在另一个构建镜像过程中执行了相同的阶段,就可以使镜像构建更快。所以你必须手动删除第一阶段镜像。

FROM node:10-alpine AS build  
WORKDIR /app  
COPY app /app  
RUN npm install && npm run build    
FROM node:10-alpineWORKDIR /app  
RUN npm install -g webserver.local  
COPY --from=build /app/build ./build  
EXPOSE 3000  
CMD webserver.local -d ./build

如何把优化Docker镜像大小

现在我们有了一个 Dockerfile,它有两个阶段:在第一个阶段中,我们编译项目,在第二个阶段中,我们在 web 服务器上部署应用程序。
然而,Node 容器并不是提供网页(HTML、CSS 和 JavaScript 文件、图片等)服务的最佳选择,最好的选择是使用像 Nginx 或 Apache 这样的服务。在本例中,我将使用 Nginx。
通过将 Dockerfile 修改为如下内容,我们的镜像最终大小是 22.4MB,如果我们运行这个容器,我们可以看到网页可以正常工作,没有任何问题。

FROM node:10-alpine AS build  
WORKDIR /app  
COPY app /app  
RUN npm install && npm run build    
FROM nginx:stable-alpine  
COPY --from=build /app/build /usr/share/nginx/html  
EXPOSE 80  
CMD ["nginx", "-g", "daemon off;"]

最终容器的运行结果

如何把优化Docker镜像大小

总结:

您可以使用多种方法来优化Docker镜像大小。这里列举几种常用的方法:文章来源地址https://www.toymoban.com/news/detail-459767.html

  1. 使用基础镜像:选择一个较小的基础镜像来作为您的应用程序的镜像。这样,您的镜像就不会包含多余的文件和依赖项。
  2. 使用多个镜像:将您的应用程序拆分成多个镜像,每个镜像只包含一个特定的功能。这样,您就可以在运行时动态加载镜像,而不需要在每个镜像中都包含所有功能。
  3. 压缩镜像:使用压缩工具对镜像进行压缩,可以节省镜像的空间。
  4. 清理无用文件:在构建镜像时,确保只包含必需的文件和依赖项。在构建过程中,可以使用命令来清理缓存和无用的文件。
  5. 使用 alpine 版本的镜像:alpine 版本的镜像比普通版本的镜像要小得多,因为它们只包含基本的 Linux 系统功能。因此,您可以使用 alpine 版本的镜像来构建您的应用程序。
  6. 删除不必要的依赖项:在构建镜像时,确保只安装必需的依赖

到了这里,关于如何把优化Docker镜像大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】查看每层镜像的大小

    👨‍🎓 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入! 🐋 希望大家多多支持,我们一起进步!😄 🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏

    2024年02月07日
    浏览(49)
  • 为什么 Elasticsearch 中高基数字段上的聚合是一个坏主意以及如何优化它

    Elasticsearch 是分布式搜索和分析引擎,是满足搜索和聚合需求的最受欢迎的选择。 Elasticsearch 提供了 2 种数据类型来存储字符串值: Text :- 在存储到倒排索引之前对这些内容进行分析,并针对全文搜索进行优化。 文本字段不允许聚合 Keyword :- 它们按原样存储在倒排索引中,

    2024年02月08日
    浏览(57)
  • Docker(二)镜像详解、镜像构建、镜像优化

    共享宿主机的kernel base镜像提供的是最小的Linux发行版(base镜像:不同发行版的/文件系统) 同一docker主机支持运行多种Linux发行版 采用分层结构的最大好处是:共享资源 镜像通过分层,如果本地已经有了,不管这一层属于哪个镜像,因为每一层都有独立的标识(都是唯一的

    2024年02月05日
    浏览(36)
  • Docker镜像构建&优化及上传

    Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使 用 Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙 Dockerfile 是一个包含一组指令的文本文件,用于告诉 Docker 如何构建一个镜像 Dockerfile一般分为四部分

    2024年01月18日
    浏览(46)
  • Docker 镜像仓库是什么?有哪些镜像仓库命令?

    (图片来源:Docker架构图) Registry(Docker 仓库) : Docker 仓库用来保存镜像,Docker 官方提供了一个公共的 Docker 仓库,称为 Docker Hub,开发者可以在 Docker Hub 上分享和获取 Docker 镜像。 Docker daemon :Docker daemon 是服务器组件,是 Docker 最核心的后台进程。 Docker 客户端(Client)

    2024年02月20日
    浏览(47)
  • 制作一个nacos的docker镜像

    首先使用git拉取nacos官方提供的镜像制作工具 git clone https://github.com/nacos-group/nacos-docker.git 拉取成功后目录是这样  文档中对目录是这么介绍的 因此我们只是制作一个镜像,只需要用到其中的build文件夹,可以发现官方已经为我们写好了dockerfile文件 打开Dockerfile文件,修改部分

    2024年02月04日
    浏览(31)
  • docker制作一个python的镜像文件

    个人博客添加链接描述 要制作一个包含Python应用程序的Docker镜像,并在构建过程中复制相应的文件到镜像中,您可以按照以下步骤进行操作: 准备工作: 确保您已在本地安装了Docker,并且可以通过终端或命令行访问Docker命令。 在项目根目录下,将您的Python应用程序准备好,

    2024年02月09日
    浏览(31)
  • 什么是docker(docker客户端、镜像、容器、仓库)

    Docker 是一个开源的容器化平台,它可以让开发者打包应用程序及其依赖项成为一个轻量级、可移植的容器,然后在任何环境中运行。Docker 容器将应用程序及其依赖项打包到一个标准化单元中,包括代码、运行时环境、系统工具、系统库等,确保应用程序在不同的环境中具有

    2024年04月10日
    浏览(45)
  • Docker chapter 6 镜像构建优化 - 依赖缓存 与 多阶段构建

    old dockerfile # syntax=docker/dockerfile:1  是 Dockerfile 的一个解析器指令,它用于声明构建时使用的 Dockerfile 语法版本。 如果你不指定这个指令,BuildKit 将使用它内置的 Dockerfile 前端版本。声明一个语法版本可以让你自动使用最新的 Dockerfile 版本,而无需升级 BuildKit 或 Docker Engine,

    2024年02月21日
    浏览(48)
  • 【Linux|Docker】以CentOS 7为基础镜像制作一个目标镜像(Nginx)

    ==== 需要哪些东西? 1.nginx的安装脚本 install_nginx.sh 源码 https://nginx.org/download/nginx-1.23.3.tar.gz 2.Dockerfile 3.1 准备环境,新建目录 3.2 编写一个编译安装nginx的脚本 为了提高效率,编写一个脚本执行,一次性编译安装好! vim install_nginx.sh 脚本文件内容如下: 3.3 编写Dockerfile 编写

    2024年02月14日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包