返回顶部
首页 > 资讯 > 精选 >精简Docker镜像的方法有哪些
  • 638
分享到

精简Docker镜像的方法有哪些

2023-06-04 16:06:33 638人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“精简Docker镜像的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“精简Docker镜像的方法有哪些”这篇文章吧。精简Docker镜像大小的必要性Docker

这篇文章主要为大家展示了“精简Docker镜像的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“精简Docker镜像的方法有哪些”这篇文章吧。

精简Docker镜像大小的必要性

Docker镜像由很多镜像层(Layers)组成(最多127层),镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(uNIOn mounts)等技术,你可以查看Docker社区文档以了解更多有关Docker存储驱动的内容,这里就不再赘述技术细节。总的来说,Dockerfile中的每条指令都会创建一个镜像层,继而会增加整体镜像的尺寸。

下面是精简Docker镜像尺寸的好处:

减少构建时间

减少磁盘使用量

减少下载时间

因为包含文件少,攻击面减小,提高了安全

提高部署速度

五点建议减小Docker镜像尺寸


优化基础镜像

优化基础镜像的方法就是选用合适的更小的基础镜像,常用的 linux 系统镜像一般有 ubuntuCentos、Alpine,其中Alpine更推荐使用。大小对比如下:

lynzabo@ubuntu ~/s> docker images
REPOSITORY         TAG             IMAGE ID            CREATED             SIZE
ubuntu             latest        74f8760a2a8b        8 days aGo          82.4MB
alpine             latest        11cd0b38bc3c        2 weeks ago         4.41MB
centos               7           49f7960eb7e4        7 weeks ago         200MB
debian             latest        3bbb526d2608        8 days ago          101MB
lynzabo@ubuntu ~/s>

Alpine是一个高度精简又包含了基本工具的轻量级Linux发行版,基础镜像只有4.41M,各开发语言和框架都有基于Alpine制作的基础镜像,强烈推荐使用它。

查看上面的镜像尺寸对比结果,你会发现最小的镜像也有4.41M,那么有办法构建更小的镜像吗?答案是肯定的,例如 GCr.io/google_containers/pause-amd64:3.1 镜像仅有742KB。为什么这个镜像能这么小?在为大家解密之前,再推荐两个基础镜像:

>>>> scratch镜像 

scratch是一个空镜像,只能用于构建其他镜像,比如你要运行一个包含所有依赖的二进制文件,如golang程序,可以直接使用scratch作为基础镜像。现在给大家展示一下上文提到的Google pause镜像Dockerfile:

FROM scratch
ARG ARCH
ADD bin/pause-${ARCH} /pause
ENTRYPOINT ["/pause"]

Google pause镜像使用了scratch作为基础镜像,这个镜像本身是不占空间的,使用它构建的镜像大小几乎和二进制文件本身一样大,所以镜像非常小。当然在我们的Golang程序中也会使用。对于一些Golang/C程序,可能会依赖一些动态库,你可以使用自动提取动态库工具,比如ldd、linuxdeployQt等提取所有动态库,然后将二进制文件和依赖动态库一起打包到镜像中。

>>>> busybox镜像

scratch是个空镜像,如果希望镜像里可以包含一些常用的Linux工具,busybox镜像是个不错选择,镜像本身只有1.16M,非常便于构建小镜像。

串联 Dockerfile 指令

大家在定义Dockerfile时,如果太多的使用RUN指令,经常会导致镜像有特别多的层,镜像很臃肿,而且甚至会碰到超出最大层数(127层)限制的问题,遵循 Dockerfile 最佳实践,我们应该把多个命令串联合并为一个 RUN(通过运算符&&/ 来实现),每一个 RUN 要精心设计,确保安装构建最后进行清理,这样才可以降低镜像体积,以及最大化的利用构建缓存

下面是一个优化前Dockerfile:

FROM ubuntu

ENV VER     3.0.0  
ENV TARBALL Http://download.redis.io/releases/Redis-$VER.tar.gz  
# ==> Install curl and helper tools...
RUN apt-get update  
RUN apt-get install -y  curl make gcc  
# ==> Download, compile, and install...
RUN curl -L $TARBALL | tar zxv  
WORKDIR  redis-$VER  
RUN make  
RUN make install  
#...
# ==> Clean up...
WORKDIR /  
RUN apt-get remove -y --auto-remove curl make gcc  
RUN apt-get clean  
RUN rm -rf /var/lib/apt/listslib/apt/lists/*
 清理镜像中缓存文件;CentOS等系统使用yum clean all 命令清理。

2. 压缩镜像

Docker 自带的一些命令还能协助压缩镜像,比如 export 和 import

$ docker run -d test/test:0.2
$ docker export 747dc0e72d13 | docker import - test/test:0.3

使用这种方式需要先将容器运行起来,而且这个过程中会丢失镜像原有的一些信息,比如:导出端口,环境变量,默认指令。

查看这两个镜像history信息,如下,可以看到test/test:0.3 丢失了所有的镜像层信息:

root@k8s-master:/tmp/iops# docker history test/test:0.3
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
6fb3f00b7a72        15 seconds ago                          84.7MB              Imported from -
root@k8s-master:/tmp/iops# docker history test/test:0.2
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
58468c0222ed        2 hours ago         /bin/sh -c #(nop)  CMD ["redis-server"]         0B      
1af7ffe3D163        2 hours ago         /bin/sh -c echo "==> Install curl and helper…   15.7MB  
8bac6e733d54        2 hours ago         /bin/sh -c #(nop)  ENV TARBALL=http://downlo…   0B      
793282f3ef7a        2 hours ago         /bin/sh -c #(nop)  ENV VER=3.0.0                0B      
74f8760a2a8b        8 days ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B      
<missing>           8 days ago          /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           8 days ago          /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   2.76kB
<missing>           8 days ago          /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           8 days ago          /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B    
<missing>           8 days ago          /bin/sh -c #(nop) ADD file:5fabb77ea8d61e02d…   82.4MB  
root@k8s-master:/tmp/iops#

以上是“精简Docker镜像的方法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 精简Docker镜像的方法有哪些

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

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

猜你喜欢
  • 精简Docker镜像的方法有哪些
    这篇文章主要为大家展示了“精简Docker镜像的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“精简Docker镜像的方法有哪些”这篇文章吧。精简Docker镜像大小的必要性Docker...
    99+
    2023-06-04
  • docker更新镜像的方法有哪些
    Docker 更新镜像的方法有以下几种:1. 通过 `docker pull` 命令拉取最新版本的镜像。可以使用 `docker p...
    99+
    2023-08-31
    docker
  • Docker删除镜像的方法有哪些
    这篇文章主要介绍“Docker删除镜像的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Docker删除镜像的方法有哪些”文章能帮助大家解决问题。删除镜像如果要删除本地的镜像,可以使用 do...
    99+
    2023-07-05
  • docker镜像导入导出的方法有哪些
    今天小编给大家分享一下docker镜像导入导出的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、使用 expor...
    99+
    2023-07-05
  • docker镜像的构建方式有哪些
    Docker镜像的构建方式有以下几种:1. 基于已有镜像:可以通过在已有镜像的基础上进行修改和定制来构建新的镜像。这种方式可以通过D...
    99+
    2023-09-18
    docker
  • docker镜像构建的方式有哪些
    有以下几种构建Docker镜像的方式: 使用Dockerfile:Dockerfile 是一个包含了构建 Docker 镜像步骤...
    99+
    2024-03-13
    docker
  • 优化Docker镜像大小常见方法有哪些
    本篇内容主要讲解“优化Docker镜像大小常见方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“优化Docker镜像大小常见方法有哪些”吧!手动管理我们能...
    99+
    2024-04-02
  • Docker镜像的知识点有哪些
    小编给大家分享一下Docker镜像的知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、简单了解DockerfileDockerfile是用来构建Doc...
    99+
    2023-06-04
  • 修改Docker镜像默认存储位置的方法有哪些
    本篇内容主要讲解“修改Docker镜像默认存储位置的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“修改Docker镜像默认存储位置的方法有哪些”吧!由于系统初始分区的原因,导致操作系统...
    99+
    2023-06-15
  • Docker镜像的使用方法
    这篇文章将为大家详细讲解有关Docker镜像的使用方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓...
    99+
    2023-06-06
  • docker容器和镜像有哪些区别
    Docker容器和镜像是Docker技术中的两个重要概念,它们有以下区别:1. 镜像是一个只读的模板,包含了运行环境和所需的软件工具...
    99+
    2023-10-19
    docker
  • Docker镜像分层的注意事项有哪些
    这篇文章主要讲解了“Docker镜像分层的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker镜像分层的注意事项有哪些”吧!docker...
    99+
    2024-04-02
  • Docker中创建镜像的方法有什么
    本篇内容介绍了“Docker中创建镜像的方法有什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! Docker创建镜像 ...
    99+
    2023-06-07
  • Docker本地导入镜像/保存镜像/载入镜像/删除镜像的方法
    本篇内容介绍了“Docker本地导入镜像/保存镜像/载入镜像/删除镜像的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2024-04-02
  • 优化Docker镜像安全性的技巧有哪些
    这篇文章主要为大家展示了“优化Docker镜像安全性的技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“优化Docker镜像安全性的技巧有哪些”这篇文章吧。1前言当你是刚开始使用 Dock...
    99+
    2023-06-29
  • Docker镜像导入导出的方法
    本篇内容主要讲解“Docker镜像导入导出的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker镜像导入导出的方法”吧!docker save说明:将指定镜像保存成 tar 归档文件,...
    99+
    2023-06-29
  • Docker使用镜像仓库的方法
    为什么用镜像仓库 核心的原因是足够方便和不容易出错。 操作流程是这样的:首先在本地docker完成镜像配置和部署等操作,测试无误后将本地镜像推到镜像仓库。需要部署到服务器时,只需要在...
    99+
    2024-04-02
  • Docker run流程及镜像的基本命令有哪些
    小编给大家分享一下Docker run流程及镜像的基本命令有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、run 的工作流程当我们在安装完Doc...
    99+
    2023-06-25
  • Docker镜像发布到Docker Hub的实现方法
    目录一、Docker 官网注册一个账号,新建仓库二、制作镜像,保存修改后的容器镜像为例三、镜像上传四、镜像下载在使用docker过程中,往往会用到镜像仓库,方便管理的同时也方便在其他...
    99+
    2024-04-02
  • docker容器详细讲解如何精简镜像减小体积
    目录一、减少镜像层数 1.指令合并 2.多阶段构建 3.启用squash特性 二、缩减容量 1. 选择小的基础镜像 2.上下文管理 3.及时清理下载 精简镜像我们可以从两个方面切入:...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作