精品欧美一区二区三区在线观看 _久久久久国色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精品国产综合久久久久久| 少妇高潮毛片色欲ava片| eeuss影院www在线观看| 国产91精品在线观看| 国产成人精品视频在线观看| 久久精品国产亚洲av香蕉 | 精品国产1区二区| 9久久婷婷国产综合精品性色 | 善良的小姨在线| 一呦二呦三呦精品国产| 亚洲一区二区三区四区五区中文| 视频一区亚洲| 天堂91在线| 国产成人免费视频一区| 国产美女直播视频一区| 免费的毛片视频| 日韩一级精品| 色综合男人天堂| 在线观看免费黄色网址| 亚洲黄色录像| 亚洲大胆人体视频| ass极品水嫩小美女ass| 在线观看欧美| 精品视频一区 二区 三区| 波多野结衣家庭教师在线| 影音先锋在线视频| **性色生活片久久毛片| 午夜精品一区二区在线观看| 日韩欧美电影在线观看| 97久久人人超碰| 国产99午夜精品一区二区三区| 国产在成人精品线拍偷自揄拍| 日本伊人精品一区二区三区观看方式 | 欧美日韩中文字幕在线| 99久久久精品视频| 亚洲小说区图片| 亚洲欧美国产三级| 黄色高清视频网站| 国产写真视频在线观看| 国产精品白丝在线| 最新不卡av| 爆操欧美美女| 亚洲一区中文在线| 精品国产一区二区三区无码| 丰满大乳少妇在线观看网站| 亚洲自拍欧美精品| 国内精品在线观看视频| 丁香花在线高清完整版视频| 亚洲一区二区中文在线| 精品久久久久久无码中文野结衣| av在线加勒比| 色呦呦国产精品| 成年人视频在线免费| 天天免费亚洲黑人免费| 欧美亚洲高清一区二区三区不卡| 久久久精品麻豆| 先锋影音一区二区| 日韩欧美一级二级| 欧美在线一级片| 美女亚洲一区| www.日韩av.com| 欧美日韩国产精品综合| 一本色道久久综合亚洲精品高清 | 亚洲精品中文字幕乱码三区91| 国产亚洲高清视频| 国产精品狠色婷| 99在线精品视频免费观看软件| 欧美三级电影网址| 欧美日韩在线播放一区| 国产精品久久久久野外| 欧美日韩一本| 色妞一区二区三区| 久久黄色免费视频| 欧美亚洲专区| 亚洲一区二区三区777| 日韩性xxxx| 国产三区在线成人av| avove在线观看| 欧产日产国产精品视频| 欧美日韩免费在线视频| 亚洲熟女一区二区三区| 国产一区二区三区四区二区| 久久精品小视频| 亚洲永久精品在线观看| 美女国产一区二区三区| 国产免费一区二区三区| 番号集在线观看| 一区二区日韩电影| 欧美黑人又粗又大又爽免费| 亚洲精品福利| 中文字幕日韩精品在线观看| 精品在线视频免费观看| 麻豆久久一区二区| 国产偷国产偷亚洲高清97cao| av在线免费观看网站| 亚洲国产精品影院| 日韩av一卡二卡三卡| 丝袜美腿综合| 欧美大片免费观看| 91麻豆一区二区| 久久久久久麻豆| 国产成a人亚洲精v品在线观看| 久久久成人av毛片免费观看| 亚洲第一级黄色片| 老湿机69福利| 青青国产91久久久久久| 久久国产精品99久久久久久丝袜| 中文在线字幕免费观看| 在线精品视频小说1| 西西大胆午夜视频| 欧美精品三级| 444亚洲人体| 日本综合在线| 在线免费亚洲电影| 喷水视频在线观看| 在线播放精品| 国语自产精品视频在免费| 一区二区三区黄| 欧美激情中文不卡| 大陆av在线播放| 日韩一区免费| 欧美猛少妇色xxxxx| 91久久久久久久久久久久| 国产午夜三级一区二区三| 无码人妻精品一区二区三区在线| 91精品导航| 欧美高清无遮挡| 精品黑人一区二区三区国语馆| 国产精品乱码人人做人人爱 | 成人午夜视频福利| 免费国产成人看片在线| 国产激情精品一区二区三区| 日韩中文字幕国产| 在线观看国产精品入口男同| 国产日韩av一区二区| 丁香婷婷激情网| 欧美精选一区二区三区| 国产精品一区久久久| yw193.com尤物在线| 欧美在线视频不卡| 久久久久亚洲AV成人无在| 强制捆绑调教一区二区| 亚洲巨乳在线观看| 成人国产在线| 久久五月情影视| 午夜精品久久久久久久99老熟妇| 亚洲精品五月天| 亚洲视频在线不卡| 欧美激情视频一区二区三区免费| 91久久偷偷做嫩草影院| 51漫画成人app入口| 亚洲精品videossex少妇| 国产精品美女久久久久av爽| 久久久www成人免费无遮挡大片| 成年人视频在线免费| 日韩欧美自拍| 成人看片在线| 欧美裸体视频| 在线精品播放av| 国产精品主播一区二区| 亚洲男人天堂av网| 视频免费在线观看| 日韩电影一区二区三区四区| 一区二区三区在线视频看| 1313精品午夜理伦电影| 91高潮在线观看| 在线看的av网站| 欧美成人在线直播| wwwxxx亚洲| 国产精品女主播在线观看| 国产一级免费大片| 国产欧美69| 一区二区三区四区在线视频| 第四色中文综合网| 国产91在线播放九色快色| 日本www在线| 亚洲成人久久久| 中文有码在线播放| 亚洲一区二三区| 我不卡一区二区| 国产成人精品免费在线| 女性隐私黄www网站视频| 亚洲综合专区| 欧美日韩一区二区三区免费| 国产欧美88| 日韩免费av片在线观看| sm国产在线调教视频| 亚洲美女黄色片| 精品国产无码AV| 色综合久久中文综合久久牛| 国产探花在线免费观看| 久久免费偷拍视频| 91丨porny丨九色| 奇米精品一区二区三区四区 | 精品国产第一区二区三区观看体验 | 91免费欧美精品| 另类激情视频| 久久久久久久久久亚洲| 在线看的av网站| 亚洲欧美激情在线视频| 日韩在线观看视频一区二区三区| 欧美日韩性生活| 免费av网站在线| 亚洲一区二区三区不卡国产欧美 | 欧美xxav| 欧美亚洲另类久久综合| 超碰地址久久| 亚洲综合日韩中文字幕v在线| 欧洲成人一区| 日本a级片电影一区二区| 久草免费在线色站| 久久久www成人免费精品| 福利视频在线导航| 亚洲视频在线观看免费| 深夜福利视频在线免费观看| 欧美成人乱码一区二区三区| 国产精品系列视频| 欧美日本视频在线| 波多野结衣爱爱| 色综合一个色综合亚洲| 日韩免费av片| 亚洲国产日韩一级| 18精品爽视频在线观看| 依依成人精品视频| 欧美视频www| 亚洲日本丝袜连裤袜办公室| 国产无遮挡猛进猛出免费软件| 噜噜爱69成人精品| avav在线看| 久久不射网站| 成人观看免费完整观看| 久久aⅴ乱码一区二区三区| av天堂永久资源网| 欧美亚洲一区| 欧美午夜性生活| 日韩和欧美的一区| 蜜臀视频一区二区三区| 日本vs亚洲vs韩国一区三区二区 | 伊人久久综合一区二区| 97欧美精品一区二区三区| а√天堂8资源中文在线| 97在线观看免费高清| 小视频免费在线观看| 日本成熟性欧美| 免费在线观看一区| 国产精品一区二区三区免费视频| 免费视频成人| 91久久中文字幕| 中文字幕视频精品一区二区三区| 国产v亚洲v天堂无码| 国产主播性色av福利精品一区| 精品网站在线看| 国产欧美高清视频在线| 在线观看欧美一区| 亚洲欧美综合国产精品一区| 久久精品国产sm调教网站演员| 亚洲一卡久久| 91国产精品视频在线观看| 国精品**一区二区三区在线蜜桃| 少妇丰满尤物大尺度写真| av一本久道久久综合久久鬼色| 在线观看福利片| 亚洲欧洲国产日韩| 国产极品美女高潮无套嗷嗷叫酒店| 亚欧色一区w666天堂| 伊人久久久久久久久久久久 | 亚洲成人资源网| 综合激情网五月| 欧美在线999| 精品久久无码中文字幕| 日韩精品一区二区三区第95| 1pondo在线播放免费| 欧美疯狂性受xxxxx另类| 人人视频精品| 亚洲va国产va天堂va久久| 免费日韩一区二区三区| 神马影院午夜我不卡| 欧美日韩一区自拍| 亚洲中文字幕久久精品无码喷水| 国产一区三区三区| 国产色视频一区二区三区qq号| 成人免费在线播放视频| 99精品视频99| 91精选在线观看| 日本福利片在线| 欧美日韩国产成人| 99欧美精品| 精品日产一区2区三区黄免费 | 久久精品国产精品亚洲| 国产美女高潮在线观看| 国产日韩亚洲欧美| 日韩精品社区| 亚洲av首页在线| 丝袜美腿亚洲一区二区图片| wwwww在线观看| 欧美国产日韩a欧美在线观看| 久久这里只有精品免费| 欧美色爱综合网| 四虎精品成人免费网站| 久热精品视频在线| 91成人抖音| 免费在线成人av电影| 欧美视频在线观看| 午夜国产福利在线观看| 久久午夜羞羞影院免费观看| 免费在线观看av网址| 8x福利精品第一导航| 国产h视频在线观看| 97av在线视频| 久久久精品国产**网站| 日本三级中文字幕在线观看| 日本成人中文字幕| 毛片网站免费观看| 亚洲v精品v日韩v欧美v专区| 精品人妻无码一区二区| 日韩日本欧美亚洲| 澳门av一区二区三区| 久久人人九九| 国产亚洲精品v| 亚洲一区二区三区四区五区六区| 一卡二卡欧美日韩| www.国产欧美| 久久成人亚洲精品| 二区三区精品| 二级片在线观看| 久久99精品久久久久久国产越南 | 亚洲宅男天堂在线观看无病毒| 国产精品欧美激情在线| 色播久久人人爽人人爽人人片视av| 午夜无码国产理论在线| 日本欧美色综合网站免费| 久久xxxx精品视频| 在线不卡av电影| 在线视频一区二区免费| 岛国大片在线观看| 热久久视久久精品18亚洲精品| 免费看日本一区二区| 妞干网在线免费视频| 国产无一区二区| 成人黄色片在线观看| 丝袜亚洲欧美日韩综合| 高清久久精品| 91国在线高清视频| 国产不卡一区视频| 福利一区二区三区四区| 亚洲第一区在线观看| 亚洲精品永久免费视频| 欧美一区二区三区四区五区六区 | 成人免费视频网| 综合久久十次| 中文字幕永久免费| 欧美日韩黄色大片| 日本成人一区| 国产精品视频一区二区高潮| 91综合视频| 亚洲精品成人无码毛片| 欧美日韩激情网| 韩国福利在线| 成人福利在线观看| 中文在线日韩| 中文字幕一区二区人妻电影丶| 欧美丝袜一区二区| 97超碰人人在线| 成人动漫视频在线观看免费| 亚洲人妖在线| 你懂得视频在线观看| 91精品国产乱码久久蜜臀| 日本在线视频www鲁啊鲁| 精品国产乱码一区二区三区四区 | 97人妻天天摸天天爽天天| 色噜噜久久综合| 黄色精品在线观看| 国模精品一区二区三区| 日韩影院在线观看| 国产精品九九九九九九| 日韩精品视频免费在线观看| www.国产精品| 中文字幕无码精品亚洲资源网久久| 久久久亚洲综合| 国产sm主人调教女m视频| 欧美孕妇孕交黑巨大网站| 日韩极品一区| 成人性生活免费看| 欧美日韩国产首页在线观看| 国产不卡人人| 正义之心1992免费观看全集完整版| 成人教育av在线| 在线观看亚洲黄色| 午夜精品福利视频| 国产精品99一区二区三区| 中文字幕在线免费看线人|