Skip to main content

Command Palette

Search for a command to run...

Dive into docker container

Updated
•1 min read•View as Markdown
Dive into docker container
J

meow meow meow meowwwww....

Background

https://github.com/wagoodman/dive

dive 是一個很方便查閱 docker container 內部狀態的工具. 有很好的視覺化介面, 觀察 image layers 與檔案的變化, layers 每一層的大小, 效率等等.

Docker Images layers

docker image 會由多個 layers 組成, 舉例來說要把編譯好的 JAR 再打包變成 docker image 方便部署時, 在建構 image 時大概會是這樣

docker image layers

但如果要看到更實際的操作, 比如說 apt-get install 到底對哪些檔案造成異動, 就能使用 dive 這個工具.

https://github.com/wagoodman/dive

Example

通常 java 專案的打包流程大概類似這樣

# 用 maven 打包 JAR, 會產生 ./target/xxx.jar 
mvn clean package

然後使用 dockerfile 進一步將 jar 打包為 docker image, 因為是隨便寫的, 所以產生了 demo-1.0.0.jar.

# 要跑在 java 21 的環境
FROM eclipse-temurin:21-jre-alpine
# 將 host 的 demo-1.0.0.jar 複製到 container 裏面
COPY ./target/demo-1.0.0.jar /app.jar
# 設定啟動後要執行 java -jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# 在 dockerfile 的資料夾下打包為 demo:1.0.0 的 images
docker build -tdemo:1.0.0 .

再來就可以用 dive 觀看狀態.

  1. 7.8 MB 是 OS Layers

  2. 19 MB 看起來是安裝了一些 OS 基本 dependencies (沒深入了解.

  3. 165 MB 看起來也是安裝了一些 OS 基本 dependencies (沒深入了解.

  4. 最後的 20 MB 就是 demo-1.0.0.jar JAR 本體.

More from this blog

Java 轉換 COBOL COMP-3 資料

老舊的金融系統編碼問題 客戶的系統是早期的 IBM-Z (COBOL), 用的是 EBCDIC 的編碼, 而台灣的環境會搭配 BIG5(cp-950) 的編碼. EBCDIC 是 IBM 系統專用的編碼, 跟 ASCII 差異如下. 為了讓資了可以被處理, 需要進行資料清洗與解碼, 礙於客戶的資安規範與其他因素限制下, 合作過程必須處理 EBCDIC + Binary 的格式文件, 來做資料轉移. 資料格式 文字類型的 BIG5 編碼處理 中文的欄位資料是採用 Big5 (cp950), 撇開...

Jul 18, 20255 min read
Java 轉換 COBOL COMP-3 資料

DirtyPaw

21 posts