• [每周一更]-(第72期):Docker容器瘦身方式


    在这里插入图片描述

    Docker清理缓存操作

    • 在构建测试的过程中,由于是自家小服务器,资源紧张,发现磁盘一直爆满,删除一些大镜像还是会占满的情况,就想到是不是也是缓存问题。
      经过查询确实是build过程中的缓存启发的占用问题。

    因此引出以下知识点,如何清除docker的构建过程中的缓存

    Docker 18.09 引入了 BuildKit ,提升了构建过程的性能、安全、存储管理等能力。

    docker system df 命令,类似于 Linux上的 df 命令,用于查看 Docker 的磁盘使用情况:
    TYPE 列出了 Docker 使用磁盘的 4 种类型:

    类型说明
    Images所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
    Containers运行的容器占用的空间,表示每个容器的读写层的空间。
    Local Volumes容器挂载本地数据卷的空间。
    Build Cache镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。
    TYPEDocker 数据类型,包括镜像(Images)、容器(Containers)、本地卷(Local Volumes)等。
    TOTAL每个数据类型的总大小。
    ACTIVE获取的数据类型个数。
    SIZE每个数据类型实际使用的大小。
    USE%使用率,表示实际使用大小占总大小的百分比。

    没清理前:

    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
    Images          46        18        8.928GB   6.253GB (70%)
    Containers      29        6         1.779GB   1.779GB (99%)
    Local Volumes   5         5         759.8MB   0B (0%)
    Build Cache     176       0         5.59GB    5.59GB
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    清理后:

    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
    Images          46        18        8.928GB   6.253GB (70%)
    Containers      29        6         1.779GB   1.779GB (99%)
    Local Volumes   5         5         759.8MB   0B (0%)
    Build Cache     111       0         0B        0B
    
    • 1
    • 2
    • 3
    • 4
    • 5

    获取完整的信息: docker system df -v

    一键清理 Build Cache 缓存命令:

    docker builder prune
    
    • 1

    如果你希望保留最近一定时间的缓存,删除时长更久的缓存,可以通过添加 --filter 参数实现,例如保留最近10天的缓存示例命令如下:

    docker builder prune --filter 'until=240h'
    
    • 1

    另外,命令 docker system prune 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。

    添加参数 docker system prune -a 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。

    清理无用的容器

    docker container prune
    
    • 1

    清理无用的镜像

    docker image prune
    
    • 1

    镜像瘦身

    容器固然由于时间的堆叠,会存在数据及日志越来越多的情况,根本上我们在构建镜像的时候,首先考虑镜像的最小化;

    比如docker的多段构建,利用docker的最小化的系统alpine等,参考:[每周一更]-(第64期):Dockerfile构造php定制化镜像

    采取一些策略来瘦身,详细操作如下:

    1. 使用轻量的基础镜像
    • 选择基于 Alpine Linux 或其他小型 Linux 发行版的基础镜像。这些基础镜像通常包含较少的组件,从而减小了镜像的大小。
    1. 多阶段构建
    • 使用多阶段构建(Multi-stage builds),这样可以在一个 Dockerfile 中包含多个 FROM 指令,每个指令对应一个构建阶段。在最终的镜像中只包含构建过程中必要的文件,减小了镜像的体积。
    dockerfileCopy code
    FROM golang:1.16 AS build
    WORKDIR /app
    COPY . .
    RUN go build -o myapp
    
    FROM alpine:latest
    WORKDIR /app
    COPY --from=build /app/myapp .
    CMD ["./myapp"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 只复制必要的文件
    • 通过使用 .dockerignore 文件来排除不需要的文件,确保只有构建应用程序所需的文件被复制到镜像中。
    1. 减少层的数量
    • 每个 Dockerfile 中的指令都会创建一个新的镜像层,因此尽量将相关的指令合并到一起,以减少层的数量。
    1. 清理不需要的文件
    • 在 Dockerfile 中,使用 RUN 指令清理不需要的中间文件,确保镜像中只包含最终需要的文件。
    1. 使用更高效的命令
    • 在 Dockerfile 中使用一些高效的命令,例如将多个 RUN 指令合并成一个,使用 && 连接多个命令。
    1. 避免不必要的依赖
    • 检查应用程序的依赖关系,避免安装不必要的软件包或库。
    1. 压缩文件
    • 在 Dockerfile 中使用 COPY 指令时,可以将文件压缩成 tar 归档,然后在容器内解压。这可以减少网络传输的数据量,同时也可以减小最终镜像的大小。

    参考地址:

  • 相关阅读:
    MIT CS143 lecture 02 Overview of COOL
    大学校园广播“录编播”与IP校园公共广播系统技术方案
    Cesium Vue(八)— 加载kml数据
    【力扣精选算法100道】——二进制求和
    【文献整理】基于深度强化学习的知识图谱推理研究
    Navicat 16.1 的新功能 - 第 1 部分
    Dapr 的 gRPC组件(又叫可插拔组件)的提案
    游戏 小代码
    【Markdown】 Markdown 操作备忘录
    pycharm的debug,你知道每个按钮对应哪个功能吗?
  • 原文地址:https://blog.csdn.net/hmx224_2014/article/details/134465459