[Docker] 使用 Dedockify 工具,反組譯出 Docker 映像檔的近似 Dockerfile
最近在看 Docker —— 從入門到實踐 這本免費線上電子書,
裡面有提到一個工具,可以將 Docker 映像檔轉成 Dockerfile,
感覺蠻有趣的,雖說跑 docker history
指令也能看到類似資訊,
但直接轉出 Dockerfile 還是更加方便~
不過提到的工具 centurylink/dockerfile-from-image 一跑就掛了,
爬文了一下,陸續試過這幾個也都不行:
最後試到 mrhavens/Dedockify 總算可以成功了…
要使用它的話,得先找到目標映像檔的 ID…
舉例來說,我想看 laniksj/dfimage 這個映像檔的內容的話,
執行 docker images
指令,找到它的 IMAGE ID 是 5b0197f77e39:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 22.04 3f4714ee068a 2 weeks ago 77.8MB ubuntu 20.04 1a437e363abf 2 weeks ago 72.8MB laniksj/dfimage latest 5b0197f77e39 5 months ago 62.8MB
先設定一個 alias,方便以後使用 (Mac 的話可以存在 ~/.bash_profile):
alias dedockify='docker run -v /var/run/docker.sock:/var/run/docker.sock --rm mrhavens/dedockify'
接著就可以用這個 alias 來檢視剛剛的映像檔 ID:
$ dedockify 5b0197f77e39 FROM laniksj/dfimage:latest ADD file:9233f6f2237d79659a9521f7e390df217cec49f1a8aa3a12147bbca1956acdb9 in / CMD ["/bin/sh"] RUN RUN /bin/sh -c apk --no-cache update \ && apk add --no-cache python3 wget \ && wget -q --no-check-certificate https://bootstrap.pypa.io/get-pip.py \ && apk del wget \ && python3 get-pip.py \ && rm -f get-pip.py \ && pip install -U docker-py pip \ && yes | pip uninstall pip # buildkit RUN COPY entrypoint.py /root/entrypoint.py # buildkit RUN ENTRYPOINT ["/root/entrypoint.py"] RUN CMD ["/bin/sh"]
可以看到它印出類似 Dockerfile 的內容,算是蠻清楚的,
只是像 ADD
和 COPY
這種指令,因為看不到原始檔案,
所以它只會把 checksum 的值印出來。
也就是說,如果想要作出一個真的可用的 Dockerfile 的話,
可能還要花點功夫,真的去映像檔裡把需要的檔案拉出來才行。
和 docker history
指令的輸出比較一下,Dockerfile 型式還是比較清楚:
$ docker history laniksj/dfimage IMAGE CREATED CREATED BY SIZE COMMENT 5b0197f77e39 5 months ago CMD ["/bin/sh"] 0B buildkit.dockerfile.v0 <missing> 5 months ago ENTRYPOINT ["/root/entrypoint.py"] 0B buildkit.dockerfile.v0 <missing> 5 months ago COPY entrypoint.py /root/entrypoint.py # bui… 1.53kB buildkit.dockerfile.v0 <missing> 5 months ago RUN /bin/sh -c apk --no-cache update && apk … 57.2MB buildkit.dockerfile.v0 <missing> 5 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 5 months ago /bin/sh -c #(nop) ADD file:9233f6f2237d79659… 5.59MB
有需要「反組譯」Docker 映像檔內容的人,也可以試試看這個工具喔~
參考資料:Docker: Reverse Engineering of an Image
(本頁面已被瀏覽過 346 次)