如何查詢每個 Docker 映象的層和層大小?
簡介
透過使用容器化,我們可以快速設定和配置我們的部署環境,這有助於我們節省時間和資源。秉承“一次編寫,隨處部署”的目標,容器化可以幫助我們簡化部署現代應用程式(這可能很複雜)的過程。
查詢 Docker 映象的層和層大小
在本文中,我們將探討如何查詢每個 Docker 映象的層和層大小。這對於識別可能導致映象整體大小增大的大型層以及確定哪些層可以刪除或最佳化以減小映象大小非常有用。
方法
我們可以使用以下技術來確定每個 Docker 映象的層和層大小:
使用 Dockerfile
使用 Docker Image Inspect 命令
讓我們詳細瞭解每個方法,並透過示例檢視它們的操作。
使用 Dockerfile
使用 Dockerfile 方法,您可以執行以下操作來確定每個 Docker 映象的層和層大小:
示例
步驟 1 - 為您的專案建立一個新目錄並導航到該目錄:
$ mkdir directoryname $ cd directoryname
步驟 2 - 在此新目錄中建立一個名為“Dockerfile”的檔案,其中包含以下內容:
FROM alpine:latest RUN apk add --no-cache curl
這包含構建映象以及基本映象的指令。
步驟 3 - 在終端中執行 docker build 命令以使用 Dockerfile 構建映象:
docker build -t myimage .
步驟 4 - 要檢查層和層大小,請在終端中執行 docker images 命令以列出系統上所有可用的映象:
docker images
輸出
REPOSITORY TAG IMAGE ID CREATED SIZE myimage latest 499a9ddb3acd 2 minutes ago 9.29MB docker-apps latest eb6dda32a60d 3 hours ago 176MB docker101tutorial latest 1ebfcd22ec64 3 hours ago 47MB ubuntu latest 6b7dfa7e8fdb 4 weeks ago 77.8MB alpine/git latest 22d84a66cda4 7 weeks ago 43.6MB
步驟 5 - 在終端中執行 docker inspect 命令以檢查映象並獲取其詳細資訊,包括層及其大小。
docker inspect IMAGE_ID
輸出
docker inspect 499a9ddb3acd
[
{
"Id": "sha256:499a9ddb3acdf2117fdb4df826e0782d05d01aa8d1c0574c96e7bed6fbbcf698",
"RepoTags": [
"myimage:latest"
],
"RepoDigests": [],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2023-01-08T07:49:58.294267525Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh"
],
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 9292948,
"VirtualSize": 9292948,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/e4c1f1bb76c66c5d1781a775c8a2ca9338065ea0b398aeaed4230a00a15d2952/diff",
"MergedDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/merged",
"UpperDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/diff",
"WorkDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf",
"sha256:19bc0373c06b6727c115ef34961486b1a9f3b7c8ccbd3441c4b108aeef2b338d"
]
},
"Metadata": {
"LastTagTime": "2023-01-08T07:49:58.412703277Z"
}
}
]
使用 Docker Image Inspect 命令
"docker image inspect" 命令允許我們探索有關 Docker 映象的全面詳細資訊,例如其層和大小。
以下步驟可用於獲取 Docker 映象的層和層大小:
步驟 1 - 透過開啟終端或命令提示符,轉到包含 Docker 映象的目錄。
步驟 2 - 要檢視所有可訪問的 Docker 映象,請在終端中執行以下命令:
docker image ls
輸出
REPOSITORY TAG IMAGE ID CREATED SIZE myimage latest 499a9ddb3acd 17 minutes ago 9.29MB docker-apps latest eb6dda32a60d 3 hours ago 176MB docker101tutorial latest 1ebfcd22ec64 3 hours ago 47MB ubuntu latest 6b7dfa7e8fdb 4 weeks ago 77.8MB alpine/git latest 22d84a66cda4 7 weeks ago 43.6MB
步驟 3 - 選擇您要檢查的映象,並記下其在先前輸出中的 ID。在本例中,我們將使用 ID 為“499a9ddb3acd”的映象。
步驟 4 - 在終端中執行以下命令以檢查映象:
docker image inspect 499a9ddb3acd
輸出
docker image inspect 499a9ddb3acd
[
{
"Id": "sha256:499a9ddb3acdf2117fdb4df826e0782d05d01aa8d1c0574c96e7bed6fbbcf698",
"RepoTags": [
"myimage:latest"
],
"RepoDigests": [],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2023-01-08T07:49:58.294267525Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh"
],
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 9292948,
"VirtualSize": 9292948,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/e4c1f1bb76c66c5d1781a775c8a2ca9338065ea0b398aeaed4230a00a15d2952/diff",
"MergedDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/merged",
"UpperDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/diff",
"WorkDir": "/var/lib/docker/overlay2/osfaf1c97lm7awgfbaqibrt6p/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf",
"sha256:19bc0373c06b6727c115ef34961486b1a9f3b7c8ccbd3441c4b108aeef2b338d"
]
},
"Metadata": {
"LastTagTime": "2023-01-08T07:49:58.412703277Z"
}
}
]
步驟 5 - 輸出將是一個 JSON 物件,其中包含有關映象的詳細資訊,包括其層和層大小,顯示在終端中。
要僅檢視層和層大小,請在終端中執行以下命令:
docker image inspect --format='{{json .RootFS.Layers}}' 499a9ddb3acd
輸出將在終端中生成映象的層及其大小的列表。
輸出
["sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf","sha256:19bc0373c06b6727c115ef34961486b1a9f3b7c8ccbd3441c4b108aeef2b338d"]
結論
在本文中,我們探討了查詢每個 Docker 映象的層和層大小的各種方法。透過使用 Dockerfile 方法,我們可以透過檢查用於構建映象的指令來檢視層和大小。Docker history 命令允許我們檢視映象的歷史記錄並檢視層及其大小。Docker image inspect 命令還提供有關映象的層和大小的詳細資訊。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP