如何查詢每個 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 命令還提供有關映象的層和大小的詳細資訊。

更新於: 2023年1月17日

7K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.