介绍

太大的 Docker 镜像会使构建和传输到云主机的时间变长。 因此,适合生产的 Docker 镜像应该只安装必需品。

有几种方法可以减小Docker镜像的大小。 首先,这些镜像通常不需要构建工具来运行其应用程序,因此根本不需要添加它们。 其次通过使用多阶段构建 ,可以使用中间镜像来编译和构建代码,安装依赖项,并将所有内容打包到最小,然后将应用程序的最终版本复制到没有构建工具的空镜像。 此外,可以使用 Alpine Linux 。 Alpine 是适合生产的 Linux 发行版,因为它只包含运行应用程序的必需品

在本文中,我将重点介绍优化 Docker 镜像使其更小,更快,更适合生产。

开始

下面我将构建一个 React 应用并容器化,在运行 npx 命令并创建 Dockerfile 后,会有如下所示的文件结构

npx create-react-app app --template typescript

如果我们构建一个基本的 Dockerfile,如下所示,那么最终得到的镜像大小为 1.16 GB:

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

第一项优化:使用轻量级镜像

在 Docker Hub(公共Docker存储库)中,有几个可供下载的镜像,每个镜像具有不同的特征和大小。 通常,与基于其他 Linux 发行版(例如 Ubuntu )的镜像相比,基于 Alpine 或 BusyBox 的镜像的体积非常小。 这是因为 Alpine 已经做过优化,只包含最小和必备软件包。 在下图中,可以看到 Ubuntu,Alpine,Node和基于 Alpine 的 Node 之间的大小比较。

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

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

第二次优化:多阶段构建

通过多阶段构建,我们可以在 Dockerfile 中使用多个基础镜像,并将编译后的代码,配置文件等从一个阶段复制到另一个阶段,以便我们可以去掉不需要的内容。

在这个例子中,我们需要部署 React 应用程序的是编译后的代码。 我们不需要源文件,也不需要 node_modules 目录,也不需要 package.json 等。 通过修改 Dockerfile ,我们的镜像的最终大小为 91.5 MB。 请记住,上一阶段(第1-4行)中的镜像不会自动删除,如果我们在另一个构建中使用同一阶段,则 Docker 会将其保留在缓存中以加快运行速度,因此必须手动删除。

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

现在,我们有了一个包含两个阶段的 Dockerfile:在第一个阶段中,我们编译项目,在第二个阶段中,我们将应用程序部署在 Web 服务器上。 但是,Node 容器并不是服务网页(HTML,CSS和 JavaScript 文件,图片等)的最佳选择,最佳选择是使用 Nginx 或 Apache 之类的服务器。 在这种情况下,我将使用 Nginx。 通过修改 Dockerfile,我们的镜像的最终大小为22.4 MB。 如果运行该容器,则可以看到网络正常运行

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镜像从1.16G优化到22M相关推荐

  1. centos7镜像加速_docker 镜像加速CentOS7详细介绍

    前言 在Docker Hub官网上注册帐号,即可下载使用仓库里的全部的docker镜像.而因为网络原因,国内的开发者没办法流畅的下载镜像,经常会出现下载中断的错误.解决方法就是使用国内的容器Hub加速 ...

  2. docker查询镜像命令_Docker镜像相关命令

    1.搜索镜像 可使用 docker search命令搜索存放在 Docker Hub中的镜像.执行该命令后, Docker就会在Docker Hub中搜索含有 java这个关键词的镜像仓库. # do ...

  3. linux 缩小链接库体积,两个奇技淫巧,将 Docker 镜像体积减小 99%

    原标题:两个奇技淫巧,将 Docker 镜像体积减小 99% 前言 对于刚接触容器的人来说,他们很容易被自己构建的 Docker 镜像体积吓到,我只需要一个几 MB 的可执行文件而已,为何镜像的体积会 ...

  4. 两个奇技淫巧,将 Docker 镜像体积减小 99%

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 前言 对于刚接触容器的人来说,他们很容易被自己构建的 D ...

  5. Docker的基本使用(部署python项目)+两个奇技淫巧,将 Docker 镜像体积减小 99%

    两个奇技淫巧,将 Docker 镜像体积减小 99% 使用Docker运行程序 Docker的基本使用(部署python项目) 一.准备项目 我写的是一个爬取某ppt网站的代码,就一个ppt1.py是 ...

  6. Docker基础镜像操作系统基础镜像对比(参考官方文档),优化docker镜像

    目录: 一. 选择Docker基础镜像 操作系统基础镜像 1. busybox 2. Alpine 3. CentOS 4. Ubuntu 5. Debian 二.编程语言基础镜像 应用基础镜像 其它 ...

  7. c语言将一段英文镜像输出,两个奇技淫巧,将 Docker 镜像体积减小 99%

    原标题:两个奇技淫巧,将 Docker 镜像体积减小 99% 对于刚接触容器的人来说,他们很容易被自己构建的 Docker 镜像体积吓到,我只需要一个几 MB 的可执行文件而已,为何镜像的体积会达到 ...

  8. docker镜像的构建及Dockerfile的详解应用,镜像加速器,镜像优化

    docker镜像的构建及dockerfile的祥解应用 1.镜像的构建 1.1创建一个Dockerfile 1.2构建镜像 1.3查看镜像的分层结构 1.4镜像的缓存特性 2.Dockerfile详解 ...

  9. Docker容器搭建及Docker镜像结构和镜像优化

    Docker Docker 是一个开源的应用容器引擎 开发者打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

最新文章

  1. 共基极放大电路_「模拟电子技术」运算放大电路的共基极、共射极、共集电极接法...
  2. 节省公司的宽带接入成本
  3. 如何条码打印软件工具箱窗格进行重新定位
  4. python读取yaml文件的内容_Python读取YAML文件过程详解
  5. 怎么让sql查询的字段可以不出现在group分组里_在工作中常用到的SQL
  6. 利用XP组策略加强机密数据安全
  7. IDEA的Database表的基本操作
  8. linux里卸载mysql数据库,Linux下卸载MySQL数据库
  9. 蓝桥杯 C语言 试题 历届试题 高僧斗法
  10. 谭浩强《C语言程序设计第五版》第二章学习笔记
  11. 项目管理的方法论 一
  12. Maven的下载安装和配置阿里云镜像教程
  13. Ubuntu 重新安装声卡驱动
  14. 组装计算机硬盘的选购,组装电脑教程:DIY组装电脑怎么选择硬盘
  15. 高质量的CAD练习图纸在线分享
  16. Freesurfer教程(ubuntu)
  17. 对外开放的通用接口设计
  18. Python参考手册(第4版)pdf
  19. 国内首场新GRE考试常见问题解答及首考回忆
  20. php 识别图片五星好评,jquery实现五星好评方法

热门文章

  1. 799元!乐视智能门锁新品Le1S发布
  2. 小米申请雷军签名商标获批
  3. 通用汽车CES官宣电动皮卡 追赶福特、Rivian
  4. 铁路12306网站App服务时间延长 退票业务可24小时全天候办理
  5. 小米12能效有望显著提升:骁龙8 Gen1功不可没
  6. 哔哩哔哩公布2021年度弹幕:“破防了”
  7. 因遭做空机构指控存在金融欺诈 法拉第未来聘请律所展开调查
  8. 贝索斯将于7月5日卸任亚马逊CEO一职
  9. 广东发布全国首批“网络视听产业试点机构”名单 虎牙获001号授牌
  10. 台积电股价涨势如虹,将带领台股挑战历史新高!