[Docker] 使用 Dedockify 工具,反組譯出 Docker 映像檔的近似 Dockerfile

[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 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料