如何将 Docker 镜像大小从 1.43 GB 减少到 22.4 MB

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

 如果你正在从事 Web 开发,那么你可能已经了解过容器化的概念以及它的优点。

但是,当使用 Docker 时,镜像大小是一个很大的问题。仅仅是从 create-react-app 中得到的样板项目就通常超过 1.43 GB。

今天我们将会容器化一个 ReactJS 应用程序,并学习一些关于如何减小镜像大小以及同时提高性能的技巧。

这些技巧将会展示给 ReactJS,但它同样适用于任何 NodeJS 应用程序。

步骤1:创建您的项目

把你的终端打开,输入以下命令:

npx create-react-app docker-image-test

然后create-react-app将为您提供基本的 React 应用程序。

之后,进入根目录并运行项目。

cd docker-image-testyarn installyarn start

然后转到http://localhost:3000查看您的应用程序是否已启动并正在运行。

如何将 Docker 镜像大小从 1.43 GB 减少到 22.4 MB

步骤2:构建您的第一个图像

在项目的根目录中,创建一个名为Dockerfile的文件并将以下代码粘贴到其中。

FROM node:12

WORKDIR /app

COPY package.json ./

RUN yarn install

COPY . .

EXPOSE 3000

CMD ["yarn", "start"]

请注意,我们正在从 docker hub 获取基本映像 node:12,安装依赖项并运行基本命令。(这里不深入docker命令的细节)

现在从您的终端,为您的容器构建图像。

docker build -t docker-image-test .

Docker 将构建您的映像。完成后,您可以使用此命令查看您的图像。

docker images

列表顶部是我们新创建的图像,在最右侧,我们可以看到图像的大小。现在是1.43GB 。

如何将 Docker 镜像大小从 1.43 GB 减少到 22.4 MB

我们可以使用以下命令运行图像

docker run --rm -it -p 3000:3000/tcp docker-image-test:latest

您可以转到浏览器并刷新页面以验证它是否仍在运行。

步骤3:更改基础图像

在之前的配置中,我们使用node:12作为基础镜像。但传统上,节点图像是基于Ubuntu的,这对于我们简单的React应用程序来说是不必要的沉重。

从 DockerHub(官方 docker image registry)可以看出,基于 Alpine 的镜像比基于 Ubuntu 的镜像要小得多,而且它们只打包了最小的依赖。

这些基本图像的大小比较如下所示。

如何将 Docker 镜像大小从 1.43 GB 减少到 22.4 MB

 现在我们将使用node:12-alpine作为我们的基础镜像,看看会发生什么。

FROM node:12-alpine

WORKDIR /app

COPY package.json ./

RUN yarn install

COPY . .

EXPOSE 3000

CMD ["yarn", "start"]

然后我们像以前一样构建图像并查看大小。

如何将 Docker 镜像大小从 1.43 GB 减少到 22.4 MB

 哇!我们的图像大小只减少到580MB。这是一个很大的进步。但我们能做得更好吗?

步骤4:多阶段构建

在我们之前的配置中,我们将所有源代码复制到工作目录中。

但这是不必要的,因为我们只需要构建文件夹来为我们的网站提供服务。所以现在,我们将使用多阶段构建的概念来减少最终图像中不必要的代码和依赖项。

配置看起来像这样。


# STAGE 1

FROM node:12-alpine AS build

WORKDIR /app

COPY package.json ./

RUN yarn  install

COPY . /app

RUN yarn build


# STAGE 2

FROM node:12-alpine

WORKDIR /app

RUN npm install -g webserver.local

COPY --from=build /app/build ./build

EXPOSE 3000

CMD webserver.local -d ./build

在第一阶段,我们安装依赖项并构建我们的项目。

在第二阶段,我们从上一阶段复制构建文件夹的内容,并使用它来为我们的应用程序提供服务。

这样,我们的最终图像中就没有不必要的依赖项和代码。

接下来,我们构建图像并像以前一样从列表中查看图像。

如何将 Docker 镜像大小从 1.43 GB 减少到 22.4 MB

 现在我们的图像大小只有97.5MB。那有多棒?

步骤5:使用 NGINX

我们正在使用节点服务器来提供ReactJS应用程序的静态资产,这不是提供静态内容的最佳选择。

我们可以使用更高效、更轻量级的服务器,如Nginx来服务我们的应用程序,看看它是否提高了我们的性能并减小了大小。

我们最终的 Docker 配置文件将如下所示。

# STAGE 1

FROM node:12-alpine AS build

WORKDIR /app

COPY package.json ./

RUN yarn  install

COPY . /app

RUN yarn build

# STAGE 2

FROM nginx:stable-alpine

COPY --from=build /app/build /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

我们正在更改 docker 配置的第二阶段,以使用 Nginx 为我们的应用程序提供服务。

然后我们使用当前配置构建我们的镜像。

如何将 Docker 镜像大小从 1.43 GB 减少到 22.4 MB

 图像大小仅减少到22.4MB!

同时,我们正在使用性能更高的服务器来为我们出色的应用程序提供服务。

我们可以使用以下命令验证我们的应用程序是否仍在运行。

docker run --rm  -it -p 3000:80/tcp docker-image-test:latest

请注意,我们将容器的 80 端口暴露给外部,因为默认情况下,Nginx将在容器内的端口 80 上可用。

这些是您可以应用于任何NodeJS项目的一些简单技巧,可以大幅减小图像大小。现在您的容器确实更加便携和高效。


作者:Mohammad Faisal

本文由“云原生数据库”小编翻译,更多技术干货请关注“云原生数据库”文章来源地址https://www.toymoban.com/news/detail-453856.html

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

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

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

相关文章

  • Ubuntu22.4系统mongodb数据库安装

    1、打开终端并运行以下命令,以导入 MongoDB GPG 密钥: 2、添加 MongoDB 仓库到你的系统。根据你的 Ubuntu 版本,选择适当的仓库链接: 对于 Ubuntu 20.04(Focal Fossa): 对于其他版本,请替换 ****$(lsb_release -cs)**** 为你的版本代号,然后运行以下命令: 3、更新你的包列表: 4、安

    2024年02月12日
    浏览(28)
  • 【Docker】查看每层镜像的大小

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

    2024年02月07日
    浏览(40)
  • Docker目录占用了太多空间, 如何减少占用?

    如果你的Docker目录占用了太多空间,你可以尝试以下几种方法来减少它的大小: 删除不再使用的镜像、容器、数据卷和网络。你可以使用sudo  docker system prune 命令来删除所有未使用的对象。 清理日志文件。Docker容器会生成日志文件,这些文件可能会占用大量空间。你可以定

    2024年02月17日
    浏览(34)
  • Ubuntu22 Snap方式安装的docker更换国内镜像

    安装ubuntu22.04.1 时,选择安装了docker。ubuntu采用了snap安装了Docker。snap方式的docker 更换国内镜像库的方式,与其他方式有一些差异。 snap方式安装,docker的配置文件在下面的位置 在daemon.json中增加国内的镜像地址

    2024年02月12日
    浏览(35)
  • ubuntu-server 22.04自动安装的docker 配置镜像源

    新装了个ubuntu server,安装的时候发现他可以选择安装默认程序包,就选了个docker。 装完后,docker拉gitlab的镜像的时候特别慢,就想换一下国内的镜像源。遇到两个问题。 教程一般是叫你去 /etc/docker/daemon.json 这个路径地下设置镜像站点。 我看了一下咱这docker的进程发现咱这

    2024年02月06日
    浏览(44)
  • 【Docker Desktop】Windows11家庭版安装docker desktop和WSl2(Ubuntu22.04)并完成迁移,配置国内镜像

    目录 一、准备工作 ① 安装Hyper-V ②开启电脑的虚拟化技术,如何确定是否开启了虚拟化技术 ③ 启动Windows功能 二、安装WSl 三、移动Ubuntu 22.04.2 LTS 四、迁移 WSL2 安装位置 五、安装Docker Desktop 六、配置Docker Desktop  七、测试 因为win11家庭版本身是不支持hyper-V的,需要手动安装

    2024年01月20日
    浏览(52)
  • JAVA将字节大小转换成(B,KB,MB,GB,TB)单位

    项目中需要判断一个文件是否超过指定大小,如果超过了,需要将文件大小转换为最大满足单位。 这里用了两种方式

    2024年02月10日
    浏览(28)
  • js将文件的大小转换成 B KB MB GB的方法教程

    以前写过一篇关于在php中将一个文件的大小(以字节为单位),转化成以合适的单位(B,KB,MB,GB)来表示的教程教程,由于博主个人习惯把一些不重要的逻辑放到用户的浏览器中去执行,也就是用JS来处理。所以就写了一个利用 js 来将文件大小转化为B KB MB GB为单位的转化方法

    2024年02月12日
    浏览(28)
  • 【docker】 docker-compose如何更新services镜像 | docker-compose如何更新某个镜像 | docker-compose如何重启某个服务

    更新镜像: 首先,确保你已经获取了最新的镜像版本。这可以通过 docker pull 命令来实现,或者直接使用 docker-compose pull 命令更新所有服务的镜像。 拉取 指定 镜像 - 代码如下: 拉取 所有 镜像 - 代码如下: 注意:在拉取更新的镜像后,docker-compose不会自动重新启动服务。你需要

    2024年02月06日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包