

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Identifikasi gambar kontainer duplikat secara otomatis saat bermigrasi ke repositori Amazon ECR
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav dan Rishi Singla, Amazon Web Services*

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

Pola ini memberikan solusi otomatis untuk mengidentifikasi apakah gambar yang disimpan di repositori kontainer yang berbeda adalah duplikat. Pemeriksaan ini berguna saat Anda berencana untuk memigrasikan gambar dari repositori kontainer lain ke Amazon Elastic Container Registry (Amazon ECR).

Untuk informasi dasar, pola juga menjelaskan komponen gambar kontainer, seperti image digest, manifes, dan tag. Saat merencanakan migrasi ke Amazon ECR, Anda dapat memutuskan untuk menyinkronkan gambar kontainer di seluruh pendaftar kontainer dengan membandingkan intisari gambar. Sebelum memigrasikan gambar kontainer, Anda perlu memeriksa apakah gambar-gambar ini sudah ada di repositori Amazon ECR untuk mencegah duplikasi. Namun, sulit untuk mendeteksi duplikasi dengan membandingkan intisari gambar, dan ini dapat menyebabkan masalah pada fase migrasi awal.  Pola ini membandingkan intisari dari dua gambar serupa yang disimpan dalam pendaftar kontainer yang berbeda dan menjelaskan mengapa intisari bervariasi, untuk membantu Anda membandingkan gambar secara akurat.

## Prasyarat dan batasan
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ Aktif Akun AWS
+ Akses ke registri [publik Amazon ECR](https://gallery.ecr.aws/)
+ Keakraban dengan yang berikut: Layanan 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](https://aws.amazon.com/s3/) (Amazon S3)
+  CodeCommit [Kredensi yang dikonfigurasi (lihat instruksi)](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)

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

**Komponen gambar kontainer**

Diagram berikut menggambarkan beberapa komponen dari gambar kontainer. Komponen-komponen ini dijelaskan setelah diagram.

![Manifes, konfigurasi, lapisan sistem file, dan intisari.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**Istilah dan definisi**

Istilah-istilah berikut didefinisikan dalam [Spesifikasi Gambar Open Container Initiative (OCI)](https://github.com/opencontainers/image-spec/blob/main/spec.md).
+ **Registry:** Layanan untuk penyimpanan dan manajemen gambar.
+ **Klien:** Alat yang berkomunikasi dengan pendaftar dan bekerja dengan gambar lokal.
+ **Push:** Proses untuk mengunggah gambar ke registri.
+ **Pull:** Proses untuk mengunduh gambar dari registri.
+ **Blob:** Bentuk biner konten yang disimpan oleh registri dan dapat diatasi dengan intisari.
+ **Indeks:** Sebuah konstruksi yang mengidentifikasi beberapa manifes gambar untuk platform komputer yang berbeda (seperti x86-64 atau ARM 64-bit) atau jenis media. Untuk informasi selengkapnya, lihat [Spesifikasi Indeks Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/image-index.md).
+ **Manifest:** Dokumen JSON yang mendefinisikan gambar atau artefak yang diunggah melalui titik akhir manifes. Manifes dapat mereferensikan gumpalan lain dalam repositori dengan menggunakan deskriptor. Untuk informasi selengkapnya, lihat [Spesifikasi Manifes Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/manifest.md).
+ **Filesystem layer:** Pustaka sistem dan dependensi lain untuk sebuah gambar.
+ **Konfigurasi:** Gumpalan yang berisi metadata artefak dan direferensikan dalam manifes. Untuk informasi selengkapnya, lihat [Spesifikasi Konfigurasi Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/config.md).
+ **Objek atau artefak:** Item konten konseptual yang disimpan sebagai gumpalan dan dikaitkan dengan manifes yang menyertainya dengan konfigurasi.
+ **Digest:** Pengidentifikasi unik yang dibuat dari hash kriptografi dari isi manifes. Image digest membantu mengidentifikasi gambar kontainer yang tidak dapat diubah secara unik. Saat Anda menarik gambar dengan menggunakan intisari, Anda akan mengunduh gambar yang sama setiap kali pada sistem operasi atau arsitektur apa pun. Untuk informasi lebih lanjut, lihat [Spesifikasi Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+ **Tag: Pengidentifikasi** manifes yang dapat dibaca manusia. Dibandingkan dengan intisari gambar, yang tidak dapat diubah, tag bersifat dinamis. Tag yang menunjuk ke gambar dapat berubah dan berpindah dari satu gambar ke gambar lainnya, meskipun intisari gambar yang mendasarinya tetap sama.

**Arsitektur target**

Diagram berikut menampilkan arsitektur tingkat tinggi dari solusi yang disediakan oleh pola ini untuk mengidentifikasi gambar kontainer duplikat dengan membandingkan gambar yang disimpan di Amazon ECR dan repositori pribadi.

![Secara otomatis mendeteksi duplikat dengan CodePipeline dan. CodeBuild](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


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

**Layanan AWS**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)adalah layanan build yang dikelola sepenuhnya yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)adalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi, tanpa perlu mengelola sistem kontrol sumber Anda sendiri.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.

**Kode**

Kode untuk pola ini tersedia di GitHub repositori [Solusi**** otomatis untuk mengidentifikasi gambar kontainer duplikat antar](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) repositori.

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

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

### Tarik gambar kontainer dari repositori publik dan pribadi Amazon ECR
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tarik gambar dari repositori publik Amazon ECR. | Dari terminal, jalankan perintah berikut untuk menarik gambar `amazonlinux` dari repositori publik Amazon ECR.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre><br />Ketika gambar telah ditarik ke mesin lokal Anda, Anda akan melihat pull digest berikut, yang mewakili indeks gambar.<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> | Pengembang aplikasi, AWS DevOps, administrator AWS | 
| Dorong gambar ke repositori pribadi Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS, AWS DevOps, Pengembang aplikasi | 
| Tarik gambar yang sama dari repositori pribadi Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Pengembang aplikasi, AWS DevOps, administrator AWS | 

### Bandingkan manifes gambar
<a name="compare-the-image-manifests"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Temukan manifes gambar yang disimpan di repositori publik Amazon ECR. | Dari terminal, jalankan perintah berikut untuk menarik manifes gambar `public.ecr.aws/amazonlinux/amazonlinux:2018.03` dari repositori publik 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> | Administrator AWS, AWS DevOps, Pengembang aplikasi | 
| Temukan manifes gambar yang disimpan di repositori pribadi Amazon ECR. | Dari terminal, jalankan perintah berikut untuk menarik manifes gambar `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest` dari repositori pribadi 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, administrator sistem AWS, Pengembang aplikasi | 
| Bandingkan intisari yang ditarik oleh Docker dengan intisari manifes untuk gambar di repositori pribadi Amazon ECR. | Pertanyaan lain adalah mengapa intisari yang disediakan oleh perintah **docker** pull berbeda dari intisari manifes untuk gambar. `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`<br />Intisari yang digunakan untuk **docker** pull mewakili intisari manifes gambar, yang disimpan dalam registri. Intisari ini dianggap sebagai root dari rantai hash, karena manifes berisi hash konten yang akan diunduh dan diimpor ke Docker.<br />ID gambar yang digunakan dalam Docker dapat ditemukan dalam manifes ini sebagai`config.digest`. Ini mewakili konfigurasi gambar yang digunakan Docker. Jadi Anda bisa mengatakan bahwa manifes adalah amplop, dan gambar adalah isi amplop. Intisari manifes selalu berbeda dari ID gambar. Namun, manifes tertentu harus selalu menghasilkan ID gambar yang sama. Karena manifes digest adalah rantai hash, kami tidak dapat menjamin bahwa itu akan selalu sama untuk ID gambar yang diberikan. Dalam kebanyakan kasus, ini menghasilkan intisari yang sama, meskipun Docker tidak dapat menjaminnya. Perbedaan yang mungkin terjadi dalam manifes digest berasal dari Docker yang tidak menyimpan gumpalan yang dikompresi dengan gzip secara lokal. Oleh karena itu, mengekspor lapisan mungkin menghasilkan intisari yang berbeda, meskipun konten yang tidak dikompresi tetap sama. ID gambar memverifikasi bahwa konten yang tidak dikompresi adalah sama; artinya, ID gambar sekarang menjadi pengenal yang dapat dialamatkan konten (). `chainID`<br />Untuk mengonfirmasi informasi ini, Anda dapat membandingkan output dari perintah **docker inspect** di repositori publik dan pribadi Amazon ECR:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)<br />Hasilnya memverifikasi bahwa kedua gambar memiliki intisari ID gambar dan intisari lapisan yang sama.<br />ID: `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`<br />Lapisan: `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`<br />Selain itu, intisari didasarkan pada byte objek yang dikelola secara lokal (file lokal adalah tar dari lapisan gambar kontainer) atau gumpalan yang didorong ke server registri. Namun, ketika Anda mendorong gumpalan ke registri, tar dikompresi dan intisari dihitung dalam file tar terkompresi. Oleh karena itu, perbedaan nilai **docker pull** digest muncul dari kompresi yang diterapkan di tingkat registri (Amazon ECR private atau public).Penjelasan ini khusus untuk menggunakan klien Docker. Anda tidak akan melihat perilaku ini dengan klien lain seperti **nerdctl** atau **Finch**, karena mereka tidak secara otomatis mengompres gambar selama operasi push dan pull. | AWS DevOps, administrator sistem AWS, Pengembang aplikasi | 

### Secara otomatis mengidentifikasi gambar duplikat antara repositori publik dan pribadi Amazon ECR
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Kloning repositori Github untuk pola ini ke dalam folder lokal:<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | Administrator AWS, AWS DevOps | 
| Siapkan CI/CD pipa. |  GitHub Repositori menyertakan `.yaml` file yang membuat CloudFormation tumpukan untuk menyiapkan pipeline. AWS CodePipeline[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)<br />Pipeline akan diatur dengan dua tahap (CodeCommit dan CodeBuild, seperti yang ditunjukkan pada diagram arsitektur) untuk mengidentifikasi gambar di repositori pribadi yang juga ada di repositori publik. Pipeline dikonfigurasi dengan sumber daya berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS, AWS DevOps | 
| Mengisi CodeCommit repositori. | Untuk mengisi CodeCommit repositori, lakukan langkah-langkah ini:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS, AWS DevOps | 
| Bersihkan. | Untuk menghindari timbulnya tagihan future, hapus sumber daya dengan mengikuti langkah-langkah berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS | 

## Pemecahan masalah
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Ketika Anda mencoba untuk mendorong, menarik, atau berinteraksi dengan CodeCommit repositori dari terminal atau baris perintah, Anda diminta untuk memberikan nama pengguna dan kata sandi, dan Anda harus menyediakan kredensi Git untuk pengguna IAM Anda. | Penyebab paling umum untuk kesalahan ini adalah sebagai berikut:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)<br />Tergantung pada sistem operasi dan lingkungan lokal Anda, Anda mungkin perlu menginstal pengelola kredensial, mengkonfigurasi pengelola kredensial yang disertakan dalam sistem operasi Anda, atau menyesuaikan lingkungan lokal Anda untuk menggunakan penyimpanan kredensial. Misalnya, jika komputer menjalankan macOS, maka Anda dapat menggunakan utilitas Keychain Access untuk menyimpan kredensial Anda. Jika komputer Anda menjalankan Windows, Anda dapat menggunakan Pengelola Kredensial Git yang diinstal dengan Git untuk Windows. Untuk informasi selengkapnya, lihat [Penyetelan untuk pengguna HTTPS yang menggunakan kredensial Git](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) dalam CodeCommit dokumentasi dan [Penyimpanan Kredenal](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage) dalam dokumentasi Git. | 
| Anda mengalami kesalahan HTTP 403 atau “tidak ada kredensial autentikasi dasar” saat Anda mendorong gambar ke repositori Amazon ECR. | **Anda mungkin menemukan pesan kesalahan ini dari perintah **docker push atau docker** **pull**, bahkan jika Anda telah berhasil mengautentikasi ke Docker dengan menggunakan perintah aws ecr. get-login-password** Penyebab yang diketahui adalah:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## Sumber daya terkait
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [Solusi otomatis untuk mengidentifikasi gambar kontainer duplikat antara repositori (repositori)](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) GitHub 
+ [Galeri publik Amazon ECR](https://gallery.ecr.aws/)
+ [Gambar pribadi di Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html) (dokumentasi Amazon ECR)
+ [AWS::CodePipeline::Pipeline sumber daya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html) (CloudFormation dokumentasi)
+ [Spesifikasi Format Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## Informasi tambahan
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Output inspeksi Docker untuk gambar di repositori publik Amazon ECR**

```
[
    {
        "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"
        }
    }
]
```

**Output inspeksi Docker untuk gambar di repositori pribadi Amazon ECR**

```
[
    {
        "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"
        }
    }
]
```