zoukankan      html  css  js  c++  java
  • 【随手记录】关于docker镜像还原dockerfile

     
     

      上云原生之后不可避免的要操作docker镜像,打镜像之前需要编写dockerfile,但是有时候我们需要根据已有的镜像还原回dockerfile.

      我们可以使用命令 docker save [镜像id] > ~/image.tar 或 docker save [镜像name:version] > ~/image.tar,区别在于前者用[镜像id]导出来的镜像没有携带 tag信息,需要手动指定!
      对于已经保存的镜像,可以使用 tar -xf image.tar 解开,如下图:

        

      可以看到有一个manifest.json说明文件、一个*.json文件和很多 文件夹,这里的文件夹就是镜像的非空层(注意这里是非空层)
      我们打开manifest.json说明文件,可以看到 layers(对应解压缩出来非空层),RepoTags(镜像的tag),Config对应打镜像的一些配置文件(*.json)

        

      我们打开这个*.json文件:

        

      可以看到
        config:是我们打镜像时候形成的一些配置,比如开放端口 ExposedPorts,环境变量Env等
        history:就是我们打镜像过程中全部层(包含非空层 和 空层),这里的空层有字段 "empty_layer": true 标示,表示该层存在,但是不占镜像空间!
        举个例子:

          如果你执行 RUN script.sh 命令创建了 really_big_file,然后用 RUN rm really_big_file 命令删除文件,Docker 镜像实际生成两层:一个包含 really_big_file,一个包含 .wh.really_big_file 记录来删除它。整个镜像文件大小不变。

          这就是为什么会经常看到像 RUN script.sh && rm really_big_file 这样的 Dockerfile 命令链接在一起——它保障所有更改都合并到一层中。

      根据history说明我们基本可以还原 dockerfile文件,但是对于 From Copy等操作不能还原,对于From操作,我们可以 tar -tf layer.tar(第一层镜像压缩文件) 查看内容,
    基本可以确认指定的 基础镜像及版本

      

  • 相关阅读:
    lufylegend:图形变形3
    javascript: Math.sin() cos() 用法
    lufylegend:图形变形2
    lufylegend:图形变形1
    lufylegend:图片的加载和显示
    lufylegend基础知识1
    canvas使用3
    canvas使用2
    canvas使用1
    javascript:addEventListener
  • 原文地址:https://www.cnblogs.com/whaleX/p/14657703.html
Copyright © 2011-2022 走看看