Dive into docker container

Photo by Olga ga on Unsplash

Dive into docker container

·

1 min read

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 本體.