如何從Docker鏡像中導出文件,再次解構Image


我最新最全的文章都在 南瓜慢說 www.pkslow.com ,歡迎大家來喝茶!

簡介

有時我們需要從別人的Docker鏡像中導出一些有用的文件,以打包進我們自己的鏡像,以滿足一些安全性、可用性等要求。本文主要介紹兩種方法。

第一種方法:從運行的容器中復制

先把鏡像跑起來,然后從運行起來的容器中復制文件出來,復制命令如下:

# 從容器復制文件或目錄到宿主機器
docker cp 6619ff360cce:/opt/h2-data/pkslow ./
docker cp 6619ff360cce:/opt/h2-data/pkslow/pkslow.txt ./

更多命令可參考:Docker和Kubernetes常用命令(持續整理)

第二種方法:解壓鏡像tar文件

首先,第一種方法並不是萬能的,因為有些鏡像過於簡單,少了許多基礎命令,以至於無法復制文件,也無法進入shell環境。其次,要運行起來再操作,也有點占用資源,比較麻煩。

ghcr.io/kedacore/keda:2.2.0為例演示如下從該鏡像中提取文件:

(1)將鏡像保存為tar文件

$ docker save -o keda.tar ghcr.io/kedacore/keda:2.2.0

(2)解壓tar文件

$ tar xvf keda.tar 
x 42b88f0429143256463a478dda36b5e6d63f6dc43e033c3415414149c8c3257b.json
x 82a2e23fb9f1f5ac86b6c60196bff58e163601e5f37f1bc2bb1bd1781e8f6906/
x 82a2e23fb9f1f5ac86b6c60196bff58e163601e5f37f1bc2bb1bd1781e8f6906/VERSION
x 82a2e23fb9f1f5ac86b6c60196bff58e163601e5f37f1bc2bb1bd1781e8f6906/json
x 82a2e23fb9f1f5ac86b6c60196bff58e163601e5f37f1bc2bb1bd1781e8f6906/layer.tar
x ec12616cdd736751f41ba8d32cb9e9553ec33fc9d0bd1df92d4d8995b3dbc8ea/
x ec12616cdd736751f41ba8d32cb9e9553ec33fc9d0bd1df92d4d8995b3dbc8ea/VERSION
x ec12616cdd736751f41ba8d32cb9e9553ec33fc9d0bd1df92d4d8995b3dbc8ea/json
x ec12616cdd736751f41ba8d32cb9e9553ec33fc9d0bd1df92d4d8995b3dbc8ea/layer.tar
x manifest.json
x repositories

可以看到每個分層的信息,我們查看manifest.json可以看到具體哪個layer是最新的。

(3)找其中一個layer再解壓

$ tar xvf ec12616cdd736751f41ba8d32cb9e9553ec33fc9d0bd1df92d4d8995b3dbc8ea/layer.tar
x keda

這樣,我們就獲取到了keda這個可執行文件。每層的打包內容不一樣,需要看所需的文件在哪個Layer。


歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...

多讀書,多分享;多寫作,多整理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM