精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何基于Docker鏡像逆向生成Dockerfile

云計算 云原生
將 Docker 鏡像逆向工程為 Dockerfile,或者稱為“回溯 Docker 鏡像”,是一種有用的技術,可以幫助理解和重新創建鏡像的構建過程。

引言

你是否曾經遇到過一個想要使用的 Docker 鏡像,但卻無法修改以適應你的特定需求?或者你可能發現了一個喜歡的 Docker 鏡像,但想要了解它是如何構建的?在這兩種情況下,將 Docker 鏡像逆向生成一個 Dockerfile 可以使用一些工具來實現。

將 Docker 鏡像轉換為 Dockerfile 意味著獲取現有的 Docker 鏡像,并使用它來創建一個你可以修改和控制的 Dockerfile。

這個過程讓你能夠理解 Docker 鏡像的內部運作方式,進行修改,更新鏡像以在不同平臺上運行,或者根據特定需求對其進行優化。

在這篇博客文章中,我們將通過使用一些開源工具,帶領您逐步解讀 Docker 鏡像并轉換為 Dockerfile 的過程。

使用Dedockify工具實現

圖片圖片

Docker 鏡像就像黑匣子,包含了在鏡像構建過程中執行的一系列指令層。

現在有了 Dedockify,一個使用 Python 腳本的工具,可以幫助重建創建鏡像所使用的 Dockerfile 的近似版本。

Dedockify 的工作原理是利用存儲在每個鏡像層旁邊的元數據。它通過沿著層級樹向后遍歷,收集與每個層相關聯的命令。

這個過程使它能夠重建在鏡像構建過程中執行的命令序列。

然而,有一個問題:如果使用了 COPY 或 ADD 指令,Dedockify 生成的輸出不會完全匹配原始的 Dockerfile。這是因為 Dedockify 無法訪問在執行原始的 docker build 命令時存在的構建上下文。

要使用 Dedockify,可以將其作為一個 Docker 容器運行:

docker run -v /var/run/docker.sock:/var/run/docker.sock dedockify <imageID>

參數 <imageID> 是鏡像 ID(可以是縮短形式或完整的鏡像 ID)。

該腳本通過與 Docker API 交互來查詢各個鏡像層的元數據,因此需要訪問 Docker API 套接字。上面顯示的 -v 標志使得在運行腳本的容器內部可以使用 Docker 套接字。

工作原理是什么?

當從 Dockerfile 構建鏡像時,Dockerfile 中的每個指令都會生成一個新的層。您可以使用 docker images 命令和(現在已棄用的)--tree 標志來查看所有的鏡像層。

$ docker images --tree
Warning: '--tree' is deprecated, it will be removed soon. See usage.
└─511136ea3c5a Virtual Size: 0 B Tags: scratch:latest
  └─1e8abad02296 Virtual Size: 121.8 MB
    └─f106b5d7508a Virtual Size: 121.8 MB
      └─0ae4b97648db Virtual Size: 690.2 MB
        └─a2df34bb17f4 Virtual Size: 808.3 MB Tags: buildpack-deps:latest
          └─86258af941f7 Virtual Size: 808.6 MB
            └─1dc22fbdefef Virtual Size: 846.7 MB
              └─00227c86ea87 Virtual Size: 863.7 MB
                └─564e6df9f1e2 Virtual Size: 1.009 GB
                  └─55a2d383d743 Virtual Size: 1.009 GB
                    └─367e535883e4 Virtual Size: 1.154 GB
                      └─a47bb557ed2a Virtual Size: 1.154 GB
                        └─0d4496202bc0 Virtual Size: 1.157 GB
                          └─5db44b586412 Virtual Size: 1.446 GB
                            └─bef6f00c8d6d Virtual Size: 1.451 GB
                              └─5f9bee597a47 Virtual Size: 1.451 GB
                                └─bb98b84e0658 Virtual Size: 1.452 GB
                                  └─6556c531b6c1 Virtual Size: 1.552 GB
                                    └─569e14fd7575 Virtual Size: 1.552 GB
                                      └─fc3a205ba3de Virtual Size: 1.555 GB
                                        └─5fd3b530d269 Virtual Size: 1.555 GB
                                          └─6bdb3289ca8b Virtual Size: 1.555 GB
                                            └─011aa33ba92b Virtual Size: 1.555 GB Tags: ruby:2, ruby:2.1, ruby:2.1.1, ruby:latest

這些層中的每一個都是在 Dockerfile 中執行指令的結果。事實上,如果您對這些層中的任何一個執行 docker inspect,您可以看到用于生成該層的指令。

$ docker inspect 011aa33ba92b
[{
  . . .
  "ContainerConfig": {
    "Cmd": [
        "/bin/sh",
        "-c",
        "#(nop) ONBUILD RUN [ ! -e Gemfile ] || bundle install --system"
    ],
    . . .
}]

Docker 示例:

以下是一個示例,展示了如何拉取官方的 Docker Ruby 鏡像并生成該鏡像的 Dockerfile。

$ docker pull mrhavens/dedockify
Using default tag: latest
latest: Pulling from dedockify

$ alias dedockify="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm mrhavens/dedockify"

$ dedockify <imageID>
FROM buildpack-deps:latest
RUN useradd -g users user
RUN apt-get update && apt-get install -y bison procps
RUN apt-get update && apt-get install -y ruby
ADD dir:03090a5fdc5feb8b4f1d6a69214c37b5f6d653f5185cddb6bf7fd71e6ded561c in /usr/src/ruby
WORKDIR /usr/src/ruby
RUN chown -R user:users .
USER user
RUN autoconf && ./configure --disable-install-doc
RUN make -j"$(nproc)"
RUN make check
USER root
RUN apt-get purge -y ruby
RUN make install
RUN echo 'gem: --no-rdoc --no-ri' >> /.gemrc
RUN gem install bundler
ONBUILD ADD . /usr/src/app
ONBUILD WORKDIR /usr/src/app
ONBUILD RUN [ ! -e Gemfile ] || bundle install --system

使用Dive工具實現

Dive 是一個用于探索 Docker 鏡像、層內容,并發現縮小 Docker/OCI 鏡像大小的方法的工具。

圖片圖片

Dive 是一個用于探索 Docker 鏡像、層內容,并發現可以減小鏡像大小的方法的工具。它提供了對每個層內容的詳細分解,包括文件大小、權限等。特別適用于識別可以刪除以減小鏡像大小的不必要文件或依賴項。

特點:

  • 詳細的層內容分解:Dive 提供了對 Docker 或 OCI 鏡像中每個層內容的詳細分解。它顯示每個文件的大小、權限和其他元數據。
  • 色彩編碼界面:Dive 使用色彩編碼界面突出顯示不同類型的文件。這使得識別并刪除不必要的文件或依賴項變得容易。
  • 交互式探索:Dive 允許您交互式地探索每個層的內容。您可以瀏覽各個層、查看單個文件,并進行更改以優化您的鏡像。
  • 優化建議:Dive 提供了優化鏡像的建議。它識別大文件、不必要的依賴項和其他潛在的優化方案。

使用方法:

要使用 Dive,您需要在系統上安裝它,并針對一個 Docker 或 OCI 鏡像運行它:

dive <imageID>

例如,要分析官方的 Alpine Linux 鏡像,您可以運行:

dive alpine:latest

然后 Dive 將顯示鏡像層的詳細分解,讓您可以探索每個層的內容并識別潛在的優化。

除了像 Dive 這樣的第三方工具外,我們可以立即使用的工具是 docker history。如果我們在示例1鏡像上使用 docker history 命令,我們可以查看在 Dockerfile 中用來創建該鏡像的條目。

docker history nginx

因此,我們應該得到以下結果:

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
374e0127c1bc        25 minutes ago      /bin/sh -c #(nop) COPY file:aa717ff85b39d3ed…   0B
84acff3a5554        25 minutes ago      /bin/sh -c #(nop) COPY file:2a949ad55eee33f6…   0B
a9cc49948e40        25 minutes ago      /bin/sh -c #(nop) COPY file:e3c862873fa89cbf…   0B

請注意,CREATED BY 列中的所有內容都被截斷了。這些是通過 Bourne shell 傳遞的 Dockerfile 指令。這些信息可能對重新創建我們的 Dockerfile 有用,盡管在這里被截斷了,但我們也可以通過使用 --no-trunc 選項來查看所有內容:

$ docker history example1 --no-trunc
IMAGE                                                                     CREATED             CREATED BY                                                                                           SIZE                COMMENT
sha256:374e0127c1bc51bca9330c01a9956be163850162f3c9f3be0340bb142bc57d81   29 minutes ago      /bin/sh -c #(nop) COPY file:aa717ff85b39d3ed034eed42bc1186230cfca081010d9dde956468decdf8bf20 in /    0B
sha256:84acff3a5554aea9a3a98549286347dd466d46db6aa7c2e13bb77f0012490cef   29 minutes ago      /bin/sh -c #(nop) COPY file:2a949ad55eee33f6191c82c4554fe83e069d84e9d9d8802f5584c34e79e5622c in /    0B
sha256:a9cc49948e40d15166b06dab42ea0e388f9905dfdddee7092f9f291d481467fc   29 minutes ago      /bin/sh -c #(nop) COPY file:e3c862873fa89cbf2870e2afb7f411d5367d37a4aea01f2620f7314d3370edcc in /    0B

雖然這里包含一些有用的數據,但從命令行解析可能會有些挑戰。我們也可以使用 docker inspect。

Dockerfile From Image (dfimage)

類似于 docker history 命令的工作方式,Python 腳本可以使用 Docker 存儲在每個鏡像層旁邊的元數據重新創建(近似地)用于生成鏡像的 Dockerfile。

https://github.com/LanikSJ/dfimage

Python 腳本本身被打包為一個 Docker 鏡像,這樣就可以很容易地使用 Docker run 命令來執行:

docker run -v /var/run/docker.sock:/var/run/docker.sock dfimage ruby:latest

ruby:latest 參數是鏡像名稱和標簽(可以是縮寫形式或完整的鏡像名稱和標簽)。

由于該腳本與 Docker API 交互以查詢各種鏡像層的元數據,因此它需要訪問 Docker API 套接字。上面顯示的 -v 標志使得 Docker 套接字在運行腳本的容器內可用。

請注意,該腳本僅適用于存在于您本地鏡像倉庫中的鏡像(即您在鍵入 docker images 時看到的內容)。如果要為本地倉庫中不存在的鏡像生成 Dockerfile,則首先需要使用 docker pull 命令拉取該鏡像。

總結

將 Docker 鏡像逆向工程為 Dockerfile,或者稱為“回溯 Docker 鏡像”,是一種有用的技術,可以幫助理解和重新創建鏡像的構建過程。工具如 Dive 和 Dedockify 可以通過分析鏡像層和元數據來生成相應的 Dockerfile,從而提供幫助。

責任編輯:武曉燕 來源: 云原生運維圈
相關推薦

2021-05-13 23:54:12

DockerDockerfile鏡像

2022-08-04 18:30:59

DockerfileDocker 鏡像Linux

2023-09-12 08:03:49

容器鏡像

2021-04-02 06:18:27

Docker鏡像

2015-10-08 09:28:47

JavaDocker鏡像

2019-10-21 11:43:00

DockerGradleJava

2021-03-28 10:16:18

SQL Server數據庫PowerDesign

2020-08-24 07:00:00

服務器Docker技術

2018-04-24 15:15:51

Dockerfile命令Docker

2025-10-14 09:58:34

2016-10-18 10:23:14

Docker容器SSL證書

2022-05-26 08:38:10

Docker鏡像運維

2024-02-20 08:08:43

2023-07-25 11:22:31

2018-04-20 15:24:55

DockerfileDocker鏡像

2014-11-18 10:37:15

dockerlinux技巧

2021-04-28 10:30:46

BuildKitDockerfileLinux

2023-02-01 15:00:45

2017-05-25 10:32:41

Docker微服務容器

2019-10-16 10:08:58

DockerLinuxWindows
點贊
收藏

51CTO技術棧公眾號

91福利视频在线| 久久蜜桃一区二区| 欧美激情图片区| 鲁大师私人影院在线观看| 春暖花开亚洲一区二区三区| 中文字幕一区二区三区蜜月| 国产经品一区二区| 在线观看 中文字幕| av影片在线一区| 日韩欧美在线1卡| 99草草国产熟女视频在线| caoporn免费在线| av在线免费不卡| 国产一区视频在线播放| 日本三级一区二区| 综合久久婷婷| 国产亚洲精品激情久久| 性感美女一区二区三区| 成人免费毛片嘿嘿连载视频…| 一二三区精品视频| 亚洲国产精品一区二区第四页av| 高清国产mv在线观看| 青青草伊人久久| 91sa在线看| 黄色一级视频免费观看| 久久综合99| 国产一区二区久久精品| 自拍视频一区二区| 无人区乱码一区二区三区| 欧美系列一区二区| 国产精品69页| 欧美少妇精品| 亚洲成av人片一区二区三区| 特级毛片在线免费观看| 国产裸舞福利在线视频合集| 99久久久免费精品国产一区二区| 波多野结衣成人在线| 亚洲视频一区在线播放| 欧美亚洲一级| 91精品国产高清自在线| 国产网站在线看| 午夜欧美精品久久久久久久| 久久国产精品久久久久久| 国产一级淫片久久久片a级| 宅男在线一区| 亚洲欧美在线x视频| 成人在线视频免费播放| 成人搞黄视频| 日韩一区二区中文字幕| 成人在线短视频| 爱情电影网av一区二区| 欧美精品日韩精品| 国产福利精品一区二区三区| 国产精品成人国产| 欧美三区免费完整视频在线观看| 超碰网在线观看| 伊人久久综合一区二区| 日韩欧美国产免费播放| 国产又黄又猛视频| 日韩精品免费观看视频| 欧美亚洲动漫制服丝袜| 日韩av卡一卡二| 精品女同一区二区三区在线观看| 欧美丝袜丝交足nylons| 性生生活大片免费看视频| 在线免费成人| 日韩一级完整毛片| xxxwww国产| 综合色就爱涩涩涩综合婷婷| 国产小视频国产精品| www中文在线| 在线精品国产| 97精品视频在线播放| 日韩精品手机在线| 久久亚洲欧洲| 国产日韩欧美夫妻视频在线观看 | 免费在线国产| 欧美极品少妇xxxxⅹ高跟鞋| 一区二区三区四区视频在线| 成人欧美在线| 欧美日韩中文字幕在线| 美女喷白浆视频| 国产一区二区三区免费在线| 亚洲精品在线三区| 一区二区伦理片| 91精品成人| 78m国产成人精品视频| 国内av在线播放| 国产成人综合自拍| 欧美精品一区二区三区在线四季 | 欧洲亚洲精品视频| 国产精品视频九色porn| 91精品一区二区三区四区| 国产ktv在线视频| 欧美日韩亚洲综合在线| 久久久久亚洲av成人网人人软件| 亚洲黄页网站| 久久国产精品久久久| 国产精品21p| 韩国成人在线视频| 欧美日本韩国一区二区三区| 免费观看在线午夜影视| 欧美日韩国产精品| 亚洲视频在线不卡| 国产影视一区| 午夜精品一区二区三区在线| 91麻豆成人精品国产| 97se狠狠狠综合亚洲狠狠| 一区二区三区四区在线视频| 天堂资源在线| 日韩视频在线永久播放| 久久久久99精品成人| 99精品欧美| 99国产在线观看| 男人和女人做事情在线视频网站免费观看| 婷婷激情综合网| 中文字幕在线视频一区二区| 国产日韩欧美一区二区三区| 国模极品一区二区三区| a毛片在线免费观看| 日本一区二区三区四区| 俄罗斯av网站| av日韩精品| 美女视频久久黄| 亚洲综合五月天婷婷丁香| 91美女福利视频| 可以看毛片的网址| 视频一区日韩精品| 久久视频免费在线播放| 中文字幕精品一区二| 久久久另类综合| 成 年 人 黄 色 大 片大 全| 欧美电影在线观看一区| 日韩天堂在线视频| 中文字幕一区二区三区四区免费看| 91一区二区在线| 激情小视频网站| 午夜视频在线观看精品中文| 久久天天躁日日躁| 国产人妖在线播放| 最新国产の精品合集bt伙计| 亚洲国产精品三区| 色喇叭免费久久综合网| 国产精品一区二区久久久| 国产成人天天5g影院在线观看| 欧美午夜女人视频在线| 日韩一级视频在线观看| 国产女优一区| 欧美日韩一区二| 午夜欧美巨大性欧美巨大| 亚洲人在线视频| 免费无码国产精品| 欧美国产日本韩| 日韩av卡一卡二| 亚洲高清资源在线观看| 91精品啪aⅴ在线观看国产| 欧美激情二区| 制服丝袜中文字幕一区| 全程偷拍露脸中年夫妇| 国产成人av电影在线| 精品国偷自产一区二区三区| 里番精品3d一二三区| 欧美一级电影免费在线观看| 青青草免费观看免费视频在线| 一本久久精品一区二区| 国产精品理论在线| 国内精品免费**视频| 日韩中文字幕在线不卡| 国产一级成人av| 91高潮在线观看| av网站无病毒在线| 日韩一区二区三区视频在线| 久久精品国产亚洲AV无码男同| 99国产欧美久久久精品| 国产av人人夜夜澡人人爽| 欧美激情777| 国产高清不卡av| 91精品产国品一二三产区| 日韩中文理论片| 欧美一级淫片免费视频魅影视频| 欧美午夜www高清视频| 人人艹在线视频| 成人福利视频网站| 三年中国国语在线播放免费| 中文字幕一区二区三区在线视频 | 欧美丝袜自拍制服另类| 欧美在线视频第一页| caoporen国产精品视频| 国产精品拍拍拍| 国模一区二区三区| 欧美日韩一区在线播放| 国产精品久久久久久av公交车| 午夜精品在线视频| 欧美成人性生活视频| 日韩电影第一页| 国产普通话bbwbbwbbw| 欧美性生交xxxxx久久久| 色老板免费视频| 91理论电影在线观看| 中国黄色片一级| 午夜亚洲视频| 日韩一级特黄毛片| 日韩.com| 欧美色欧美亚洲另类七区| 亚洲91网站| 国产精品爽黄69天堂a| 国产社区精品视频| 久久九九亚洲综合| 黄色软件在线| 亚洲国产美女精品久久久久∴| 亚洲图片中文字幕| 色综合久久天天| 麻豆一区二区三区精品视频| 国产精品麻豆一区二区| 日韩网站在线播放| 成人在线视频首页| 北条麻妃亚洲一区| 老司机精品视频在线| 激情网站五月天| 亚洲理伦在线| 4444亚洲人成无码网在线观看| 日韩av有码| 日韩精品大片| 蜜桃成人av| 国产一区二区三区无遮挡| 国产精品麻豆| 成人美女av在线直播| av成人在线播放| 热99精品里视频精品| 国产精品论坛| 久久久免费观看视频| 手机电影在线观看| 不卡av在线网站| 好操啊在线观看免费视频| 中文字幕亚洲欧美日韩高清| 久久精品a一级国产免视看成人| 精品福利av导航| 亚洲av无码国产精品久久不卡| 777a∨成人精品桃花网| 91精东传媒理伦片在线观看| 欧美视频精品在线| 国产精品成人久久久| 色激情天天射综合网| av毛片在线免费观看| 日本黄色一区二区| 欧美男人天堂网| 欧美色成人综合| 97超碰人人草| 日韩一区二区三区高清免费看看| 一级特黄色大片| 3d成人动漫网站| 国产高清视频免费观看| 日韩欧美一级片| 人妻丰满熟妇av无码区hd| 亚洲第一区第一页| 亚洲欧美综合在线观看| 亚洲视频在线观看网站| a黄色在线观看| 日韩中文在线视频| av网址在线免费观看| 欧美激情精品久久久久久| av中文字幕在线观看第一页| 欧美综合国产精品久久丁香| 日韩一区二区三区在线免费观看 | 做爰无遮挡三级| 欧美精品一级二级| 亚洲成人一级片| 亚洲精品电影在线| 国产经典自拍视频在线观看| 中文字幕久热精品视频在线| 麻豆影院在线| 久久久久久久久亚洲| 亚洲女同av| 国产美女精品视频免费观看| 日韩激情欧美| 老司机精品福利在线观看| 欧洲杯半决赛直播| 好吊色视频988gao在线观看| 99亚洲伊人久久精品影院红桃| 国产熟女高潮视频| 国产一区 二区 三区一级| 亚洲少妇18p| 国产精品视频麻豆| 国产精品成人国产乱| 欧美三日本三级三级在线播放| 亚洲第一黄色片| 亚洲午夜女主播在线直播| 91蜜桃在线视频| 日韩av免费看| 日韩欧美中文在线观看| 欧美精品在线一区| 中文字幕人成人乱码| 无码aⅴ精品一区二区三区浪潮| 久久se这里有精品| 大地资源二中文在线影视观看| 国产精品国产a| 国产精品视频久久久久久久| 欧美人狂配大交3d怪物一区| 亚洲aaa在线观看| 久久在线免费观看视频| 台湾佬中文娱乐久久久| 成人欧美一区二区| 日本欧美肥老太交大片| 久久久久久久久久网| 久久超碰97人人做人人爱| 全黄一级裸体片| 亚洲国产成人高清精品| 91成品人影院| 国产亚洲精品美女久久久| 24小时免费看片在线观看| 亚洲一区中文字幕| 青青草成人影院| 高清在线观看免费| 成人小视频在线| 人妻人人澡人人添人人爽| 欧美中文字幕久久| 丝袜视频国产在线播放| 色综合天天综合网国产成人网| 国产精品xxx| 日本视频一区二区在线观看| 亚洲日本国产| 亚洲av午夜精品一区二区三区| 1000部国产精品成人观看| 国产天堂第一区| 亚洲欧美www| 人在线成免费视频| 国产综合18久久久久久| 国产一区亚洲| 在线观看欧美一区二区| 自拍偷自拍亚洲精品播放| 91国在线视频| 精品国产美女在线| 中文字幕日本一区| 亚洲最新在线| 老司机精品视频导航| 国产三级黄色片| 欧美日韩一级二级三级| 爱久久·www| 国产精品美女久久久久av超清| 国产成人1区| 国产视频一区二区视频| 国产亚洲1区2区3区| 无码免费一区二区三区| 亚洲欧美综合精品久久成人| 国产欧美一区二区三区精品酒店| 久久精品人成| 久久久噜噜噜| 91社区视频在线观看| 欧美日韩电影在线| 麻豆传媒视频在线观看免费| 91色在线视频| 欧美粗暴jizz性欧美20| 国产吃瓜黑料一区二区| 精品久久久久久中文字幕大豆网| 天堂a中文在线| 国产v综合ⅴ日韩v欧美大片| 成人久久电影| 91欧美一区二区三区| 一区二区在线免费| 无码精品黑人一区二区三区| 国产91精品在线播放| 999精品在线| 9191在线视频| 精品久久中文字幕久久av| 国产在线观看精品一区| 国产乱肥老妇国产一区二| 午夜视频一区| 欧美高清性xxxx| 欧美色精品在线视频| 顶级网黄在线播放| 国产在线资源一区| 日韩国产在线观看一区| 欧美黄色aaa| 亚洲精品第一页| 久久精品xxxxx| 青春草国产视频| 国产女人18毛片水真多成人如厕| 国产精品久久久久久久免费看| 九九久久久久99精品| 日韩有码av| 亚洲涩涩在线观看| 亚洲国产精品一区二区久久 | 国语自产精品视频在免费| 九九久久精品| 欧美污在线观看| 日韩欧美成人网| 自拍亚洲图区| 日本一区不卡| 国产99久久久国产精品 | 91精品国产一区二区三区蜜臀| segui88久久综合| 丝袜美腿玉足3d专区一区| 国产成人av网站| 在线免费看毛片| 91福利视频网| 欧美性久久久| 999福利视频| 亚洲欧美三级伦理| 亚洲精品在线播放| 亚洲成人天堂网|