当前位置: 首页 > news >正文

从docker镜像反推Dockerfile

在项目运维的过程中,偶尔会遇到某个docker image打包时候的Dockerfile版本管理不善无法与image对应的问题,抑或需要分析某个三方docker image的构建过程,这时,就希望能够通过image反推构建时的instruction.

想实现这个过程可以使用一些三方工具比如 dive,但是需要额外的安装,其实docker本身也有可用的功能 docker history,能帮助我们分析image的构建命令.

docker history 命令

docker history 命令是一个非常有用的 Docker 工具,它可以帮助我们了解 Docker 镜像的构建过程和历史。以下是对这个命令的详细介绍:

  1. 功能: docker history 命令可以显示 Docker 镜像的构建历史,包括每一层的操作指令、大小、创建时间等信息。这些信息对于理解和维护 Docker 镜像非常重要。

  2. 语法:

    docker history [OPTIONS] IMAGE
    

    其中 OPTIONS 包括:

    • -H, --human: 以人类可读的格式显示镜像大小
    • -q, --quiet: 只显示镜像 ID
    • -no-trunc: 不截断输出
  3. 示例:

    docker history nginx:latest
    

    这个命令会显示 nginx:latest 镜像的构建历史,包括每一层的操作指令、大小、创建时间等信息。

  4. 输出解读:

    • IMAGE ID: 每一层镜像的 ID
    • CREATED: 每一层镜像的创建时间
    • CREATED BY: 每一层镜像的构建指令
    • SIZE: 每一层镜像的大小
    • COMMENT: 每一层镜像的注释信息
  5. 应用场景:

    • 了解镜像的构建过程,帮助诊断和修复问题
    • 优化镜像大小,删除无用的中间层
    • 分析镜像的变更历史,方便回滚和迭代
    • 从镜像中反推出 Dockerfile

在使用的过程中,一般需要加上--no-trunc 不截断输出,因为有些命令长度较长,例如RUN 命令,这里笔者给出一个示例:

RUN /bin/sh -c pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ &&     pip install edge-tts PyMCubes imageio[ffmpeg] torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 torch-ema &&     pip install numpy~=1.26.0 pyaudio~=0.2.13 soundfile~=0.12.1 resampy~=0.4.2 transformers~=4.32.1 requests~=2.31.0 scipy~=1.11.3 tqdm~=4.65.0 tensorboardx~=2.6.2.2 pandas~=2.1.1 opencv-python~=4.8.1.78 matplotlib~=3.8.1 trimesh~=4.0.2 imageio~=2.31.6 lpips~=0.1.4 rich~=13.6.0 packaging~=23.1 pillow~=10.0.1 setuptools~=68.0.0 jinja2~=3.1.2 pyyaml~=6.0.1 tabulate~=0.9.0 loguru~=0.7.2 pydub~=0.25.1 flask~=2.2.2 websockets flask-sock dynaconf~=3.2.4 torchvision~=0.15.2 nbformat~=5.9.2 beautifulsoup4~=4.12.2 nbconvert~=7.10.0 gradio~=4.18.0 # buildkit 

从这些输出中就可以尽量去反推构建的过程,尤其是一些依赖包的安装过程.

其他工具

除了上面提到的dive,还有一些其他工具可以帮助分析构建命令实现反推dockerfile,比如dfimage,Whaler,Dedockify 等,可以根据自己的分析需求来选择.

http://www.lryc.cn/news/361098.html

相关文章:

  • 车载软件架构 - AUTOSAR 的信息安全框架
  • 欧洲版“OpenAI”——Mistral 举办的 AI 大模型马拉松
  • Java | Leetcode Java题解之第128题最长连续序列
  • C++的List
  • 网易有道QAnything使用CPU模式和openAI接口安装部署
  • 量子加速超级计算简介
  • Unity3D 基于YooAssets的资源管理详解
  • Linux 自动化升级Jar程序,指定Jar程序版本进行部署脚本
  • python练习五
  • YOLOv1深入解析与实战:目标检测算法原理
  • Apache Calcite - 自定义标量函数
  • STM32作业实现(四)光敏传感器
  • HTML+CSS 文本动画卡片
  • MongoDB CRUD操作: 在本地实例进行文本搜索查询
  • 文档智能开源软件
  • [C][可变参数列表]详细讲解
  • 54. 螺旋矩阵【rust题解】
  • 学习笔记——网络参考模型——TCP/IP模型(传输层)
  • Java中的Instant
  • PostgreSQL的锁介绍
  • 4分之1外螺纹怎么编程:挑战与策略解析
  • 运用selenium爬取京东商品数据储存到MySQL数据库中
  • K8S SWCK SkyWalking全链路跟踪工具安装
  • Apache Omid Idea Debug 环境搭建
  • 【面试宝藏】Go并发编程面试题
  • ④单细胞学习-cellchat细胞间通讯
  • 即时通讯平台及门户系统WorkPlus打造移动应用管理平台
  • React@16.x(12)ref 转发-forwardRef
  • 电脑世界的大冒险:用人体比喻让孩子轻松理解电脑20240603
  • 构建智慧银行保险系统的先进技术架构