

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 遷移至 Amazon ECR 儲存庫時，自動識別重複的容器映像
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav 和 Rishi Singla，Amazon Web Services*

## 總結
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

模式提供自動化解決方案，以識別存放在不同容器儲存庫中的映像是否為重複。當您計劃將映像從其他容器儲存庫遷移到 Amazon Elastic Container Registry (Amazon ECR) 時，此檢查很有用。

如需基礎資訊，模式也會說明容器映像的元件，例如映像摘要、資訊清單和標籤。當您計劃遷移至 Amazon ECR 時，您可以比較映像摘要，以決定跨容器登錄檔同步容器映像。遷移容器映像之前，您需要檢查 Amazon ECR 儲存庫中是否存在這些映像，以防止重複。不過，比較映像摘要可能很難偵測重複項目，這可能會導致初始遷移階段發生問題。 此模式會比較存放在不同容器登錄檔中的兩個類似影像的摘要，並說明摘要為何不同，以協助您準確比較影像。

## 先決條件和限制
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ 作用中 AWS 帳戶
+ 存取 [Amazon ECR 公有登錄](https://gallery.ecr.aws/)檔
+ 熟悉下列項目 AWS 服務：
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/)
+ 設定的 CodeCommit 登入資料 （請參閱[說明](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html))

## Architecture
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**容器映像元件**

下圖說明容器映像的一些元件。這些元件會在圖表後說明。

![資訊清單、組態、檔案系統層和摘要。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**術語和定義**

下列術語在[開放式容器計畫 (OCI) 映像規格](https://github.com/opencontainers/image-spec/blob/main/spec.md)中定義。
+ **登錄檔：**映像儲存和管理的服務。
+ **用戶端：**與登錄檔通訊並搭配本機映像使用的工具。
+ **推送：**將映像上傳至登錄檔的程序。
+ **提取：**從登錄檔下載映像的程序。
+ **Blob：**由登錄檔存放且可由摘要處理之內容的二進位形式。
+ **索引：**用於識別不同電腦平台 （例如 x86-64 或 ARM 64 位元） 或媒體類型的多個影像資訊清單的建構。如需詳細資訊，請參閱 [OCI 影像索引規格](https://github.com/opencontainers/image-spec/blob/main/image-index.md)。
+ **資訊清單：**JSON 文件，定義透過資訊清單端點上傳的影像或成品。資訊清單可以使用描述項來參考儲存庫中的其他 Blob。如需詳細資訊，請參閱 [OCI 映像資訊清單規格](https://github.com/opencontainers/image-spec/blob/main/manifest.md)。
+ **檔案系統層：**影像的系統程式庫和其他相依性。
+ **組態：**包含成品中繼資料並在資訊清單中參考的 Blob。如需詳細資訊，請參閱 [OCI 映像組態規格](https://github.com/opencontainers/image-spec/blob/main/config.md)。
+ **物件或成品：**儲存在 Blob 中的概念內容項目，並與具有組態的隨附資訊清單相關聯。
+ **摘要：**從資訊清單內容的密碼編譯雜湊建立的唯一識別符。映像摘要有助於唯一識別不可變的容器映像。當您使用映像摘要提取映像時，每次在任何作業系統或架構上都會下載相同的映像。如需詳細資訊，請參閱 [OCI Image Specification](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests)。
+ **標籤：**人類可讀取的資訊清單識別符。相較於不可變的影像摘要，標籤是動態的。指向影像的標籤可以變更，並從一個影像移至另一個影像，但基礎影像摘要保持不變。

**目標架構**

下圖顯示此模式所提供解決方案的高階架構，透過比較存放在 Amazon ECR 和私有儲存庫中的映像來識別重複的容器映像。

![使用 CodePipeline 和 CodeBuild 自動偵測重複項目。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## 工具
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-tools"></a>

**AWS 服務**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可協助您設定 AWS 資源、快速一致地佈建資源，以及在整個 AWS 帳戶 和 區域的生命週期中管理資源。
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)是一種全受管建置服務，可協助您編譯原始程式碼、執行單元測試，並產生準備好部署的成品。
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 是一種版本控制服務，可協助您私下存放和管理 Git 儲存庫，而無需管理您自己的來源控制系統。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 可協助您快速建模和設定軟體版本的不同階段，並自動化持續發行軟體變更所需的步驟。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 是一種受管容器映像登錄服務，安全、可擴展且可靠。

**程式碼 **

此模式的程式碼可在 GitHub 儲存庫中取得** **[自動化解決方案，以識別儲存庫之間的重複容器映像](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/)。

## 最佳實務
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ [CloudFormation 最佳實務](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ [AWS CodePipeline 最佳實務](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html)

## 史詩
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### 從 Amazon ECR 公有和私有儲存庫提取容器映像
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 從 Amazon ECR 公有儲存庫中提取映像。 | 從終端機執行下列命令，`amazonlinux`從 Amazon ECR 公有儲存庫提取映像。<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre><br />將映像提取至本機機器後，您會看到下列提取摘要，其代表映像索引。<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | 應用程式開發人員、AWS DevOps、AWS 管理員 | 
| 將映像推送至 Amazon ECR 私有儲存庫。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS 管理員、AWS DevOps、應用程式開發人員 | 
| 從 Amazon ECR 私有儲存庫提取相同的映像。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 應用程式開發人員、AWS DevOps、AWS 管理員 | 

### 比較影像資訊清單
<a name="compare-the-image-manifests"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 尋找存放在 Amazon ECR 公有儲存庫中的映像資訊清單。 | 從終端機執行下列命令，`public.ecr.aws/amazonlinux/amazonlinux:2018.03`從 Amazon ECR 公有儲存庫提取映像資訊清單。<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | AWS 管理員、AWS DevOps、應用程式開發人員 | 
| 尋找存放在 Amazon ECR 私有儲存庫中的映像資訊清單。 | 從終端機執行下列命令，`<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`從 Amazon ECR 私有儲存庫提取映像資訊清單。<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps、AWS 系統管理員、應用程式開發人員 | 
| 比較 Docker 提取的摘要與 Amazon ECR 私有儲存庫中影像的資訊清單摘要。 | 另一個問題是為什麼 **docker pull** 命令提供的摘要與影像 的資訊清單摘要不同`<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`。<br />用於 **docker pull** 的摘要代表影像資訊清單的摘要，存放在登錄檔中。此摘要會被視為雜湊鏈的根目錄，因為資訊清單包含將下載並匯入 Docker 的內容雜湊。<br />在此資訊清單中，Docker 中使用的映像 ID 為 `config.digest`。這代表 Docker 使用的映像組態。因此，您可以說資訊清單是信封，而影像是信封的內容。資訊清單摘要一律與影像 ID 不同。不過，特定資訊清單應一律產生相同的影像 ID。由於資訊清單摘要是雜湊鏈，我們無法保證指定影像 ID 永遠相同。在大多數情況下，它會產生相同的摘要，但 Docker 無法保證這一點。資訊清單摘要中的可能差異源於 Docker 不會儲存本機使用 gzip 壓縮的 Blob。因此，匯出層可能會產生不同的摘要，但未壓縮的內容保持不變。影像 ID 會驗證未壓縮的內容是否相同；也就是說，影像 ID 現在是內容可定址識別符 (`chainID`)。<br />若要確認此資訊，您可以比較 Amazon ECR 公有和私有儲存庫上 **docker inspect** 命令的輸出：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)<br />結果會驗證兩個影像具有相同的影像 ID 摘要和圖層摘要。<br />ID： `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`<br />圖層： `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`<br />此外，摘要是根據本機受管物件的位元組 （本機檔案是容器映像層的 tar) 或推送至登錄伺服器的 Blob。不過，當您將 Blob 推送至登錄檔時，會壓縮 tar，並在壓縮的 tar 檔案中計算摘要。因此，**Docker 提取**摘要值的差異源自於在登錄檔 (Amazon ECR 私有或公有） 層級套用的壓縮。此說明專屬於使用 Docker 用戶端。您將不會在其他用戶端看到此行為，例如 **nerdctl** 或 **Finch**，因為它們不會在推送和提取操作期間自動壓縮映像。 | AWS DevOps、AWS 系統管理員、應用程式開發人員 | 

### 自動識別 Amazon ECR 公有和私有儲存庫之間的重複映像
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 複製儲存庫。 | 將此模式的 Github 儲存庫複製到本機資料夾：<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | AWS 管理員、AWS DevOps | 
| 設定 CI/CD 管道。 | GitHub 儲存庫包含一個 `.yaml` 檔案，可建立 CloudFormation 堆疊以在其中設定管道 AWS CodePipeline。[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)<br />管道將設定兩個階段 (CodeCommit 和 CodeBuild，如架構圖所示），以識別私有儲存庫中也存在於公有儲存庫中的映像。管道是以下列資源設定：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS 管理員、AWS DevOps | 
| 填入 CodeCommit 儲存庫。 | 若要填入 CodeCommit 儲存庫，請執行下列步驟：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS 管理員、AWS DevOps | 
| 清除。 | 若要避免產生未來費用，請依照下列步驟刪除資源：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS 管理員 | 

## 疑難排解
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| 問題 | 解決方案 | 
| --- | --- | 
| 當您嘗試從終端機或命令列推送、提取或以其他方式與 CodeCommit 儲存庫互動時，系統會提示您提供使用者名稱和密碼，而且您必須為 IAM 使用者提供 Git 登入資料。 | 此錯誤的最常見原因如下：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)<br />根據作業系統和本機環境，您可能需要安裝登入資料管理工具、設定作業系統中包含的登入資料管理工具，或自訂本機環境以使用登入資料儲存體。例如，如果您的電腦正在執行 macOS，您可以使用 Keychain Access 公用程式來存放您的登入資料。如果您的電腦執行 Windows，您可以使用隨著適用於 Windows 的 Git 安裝的 Credential Manager。如需詳細資訊，請參閱 CodeCommit 文件中的[使用 Git 登入資料設定 HTTPS 使用者](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)，以及 Git 文件中的[登入資料儲存](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage)。 | 
| 當您將映像推送到 Amazon ECR 儲存庫時，遇到 HTTP 403 或「沒有基本身分驗證登入資料」錯誤。 | 即使您已使用 aws ecr get-login-password 命令成功向 Docker 進行身分驗證，也可能會從 **docker push** 或 **docker pull** 命令中遇到這些錯誤訊息。 ** get-login-password** 已知原因包括：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## 相關資源
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [識別儲存庫之間重複容器映像的自動化解決方案 ](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/)(GitHub 儲存庫）
+ [Amazon ECR 公有圖庫](https://gallery.ecr.aws/)
+ [Amazon ECR 中的私有映像 ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html)(Amazon ECR 文件）
+ [AWS::CodePipeline::Pipeline 資源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html) (CloudFormation 文件）
+ [OCI 影像格式規格](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## 其他資訊
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Amazon ECR 公有儲存庫中映像的 Docker 檢查輸出**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "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",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "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/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Amazon ECR 私有儲存庫中映像的 Docker 檢查輸出**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "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",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "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/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```