Identifikasi gambar kontainer duplikat secara otomatis saat bermigrasi ke repositori Amazon ECR - AWS Prescriptive Guidance

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

Rishabh Yadav dan Rishi Singla, Amazon Web Services

Ringkasan

Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya

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

Arsitektur

Komponen gambar kontainer

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

Manifes, konfigurasi, lapisan sistem file, dan intisari.

Istilah dan definisi

Istilah-istilah berikut didefinisikan dalam Spesifikasi Gambar Open Container Initiative (OCI).

  • 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.

  • 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.

  • 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.

  • 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.

  • 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

Alat

Layanan AWS

  • CloudFormationmembantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah.

  • AWS CodeBuildadalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.

  • AWS CodeCommitadalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi, tanpa perlu mengelola sistem kontrol sumber Anda sendiri.

  • AWS CodePipelinemembantu 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) 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 repositori.

Praktik terbaik

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Tarik gambar dari repositori publik Amazon ECR.

Dari terminal, jalankan perintah berikut untuk menarik gambar amazonlinux dari repositori publik Amazon ECR.

$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03

Ketika gambar telah ditarik ke mesin lokal Anda, Anda akan melihat pull digest berikut, yang mewakili indeks gambar.

2018.03: Pulling from amazonlinux/amazonlinux 4ddc0f8d367f: Pull complete Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5 Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03 public.ecr.aws/amazonlinux/amazonlinux:2018.03
Pengembang aplikasi, AWS DevOps, administrator AWS

Dorong gambar ke repositori pribadi Amazon ECR.

  1. Buat repositori Amazon ECR pribadi yang dinamai test_ecr_repository di Wilayah AS Timur (Virginia Utara) (). us-east-1

    $~ % aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <account-id>.dkr.ecr.us-east-1.amazonaws.com Login Succeeded

    dimana <account-id> mengacu pada Anda Akun AWS.

  2. Tandai gambar lokal yang Anda tarik sebelumnya. Gunakan nilainya public.ecr.aws/amazonlinux/amazonlinux:2018.03 dan dorong ke repositori pribadi Amazon ECR.

    $~ % docker tag public.ecr.aws/amazonlinux/amazonlinux:2018.03 <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest $~ % docker push <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest

    Saat Anda mendorong gambar ke repositori Amazon ECR, Docker akan mendorong gambar yang mendasarinya dan bukan indeks gambar.

    The push refers to repository [<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository] d5655967c2c4: Pushed latest: digest: sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02 size: 529
Administrator AWS, AWS DevOps, Pengembang aplikasi

Tarik gambar yang sama dari repositori pribadi Amazon ECR.

  1. Dari terminal, jalankan perintah berikut untuk menarik gambar yang sebelumnya Anda dorong ke repositori pribadi Amazon ECR.

    $~ % docker pull <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest latest: Pulling from test_ecr_repository Digest: sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02 Status: Image is up to date for <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest

    Intisari untuk gambar ini cocok dengan intisari gambar yang Anda dorong ke repositori pribadi Amazon ECR, dan mewakili gambar yang mendasarinya. Nilai ini tidak cocok dengan indeks gambar yang Anda tarik dari repositori publik.

  2. Untuk memverifikasi, ambil indeks gambar dengan digest. 

    curl -k -H "Authorization: Bearer $TOKEN" https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b55 { "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 529, "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02", "platform": { "architecture": "amd64", "os": "linux" } } ] }
Pengembang aplikasi, AWS DevOps, administrator AWS
TugasDeskripsiKeterampilan 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.

$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03 { "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 529, "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02", "platform": { "architecture": "amd64", "os": "linux" } } ] }
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.

$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest { "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "config": { "mediaType": "application/vnd.docker.container.image.v1+json", "size": 1477, "digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68" }, "layers": [ { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 62267075, "digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453" } ] }
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

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.

ID gambar yang digunakan dalam Docker dapat ditemukan dalam manifes ini sebagaiconfig.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

Untuk mengonfirmasi informasi ini, Anda dapat membandingkan output dari perintah docker inspect di repositori publik dan pribadi Amazon ECR:

  1. Jalankan perintah berikut dari terminal Anda untuk gambar yang disimpan di repositori publik Amazon ECR.

    $~ % docker inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03

    Untuk output dari perintah, lihat bagian Informasi tambahan.

  2. Jalankan perintah berikut dari terminal Anda untuk gambar yang disimpan di repositori pribadi Amazon ECR.

    $~ % docker inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest

    Untuk output dari perintah, lihat bagian Informasi tambahan.

Hasilnya memverifikasi bahwa kedua gambar memiliki intisari ID gambar dan intisari lapisan yang sama.

ID: f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68

Lapisan: d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2

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).

catatan

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
TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

Kloning repositori Github untuk pola ini ke dalam folder lokal:

$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories
Administrator AWS, AWS DevOps

Siapkan CI/CD pipa.

GitHub Repositori menyertakan .yaml file yang membuat CloudFormation tumpukan untuk menyiapkan pipeline. AWS CodePipeline

  1. Masuk ke Konsol Manajemen AWS dan buka CloudFormation konsol.

  2. Buat tumpukan dengan menggunakan pipeline.yaml file template, yang ada di code folder di repositori kloning.

  3. Terima atau ubah nilai default parameter. Tentukan nilai untuk yang berikut:

    • Nama tumpukan

    • ArtifactStoreBucketName- Bucket S3 yang ada yang akan digunakan untuk menyimpan AWS CodePipeline artefak

    • OutputBucket- Bucket S3 yang ada yang akan digunakan untuk menyimpan gambar URIs duplikat

    • SourceImageFile- File teks yang ada bernama input.txt yang berisi gambar URIs dari repositori publik yang akan diperiksa terhadap repositori pribadi Amazon ECR untuk mendeteksi duplikasi

  4. Tinjau dan sesuaikan opsi tumpukan, lalu pilih Kirim untuk menjalankan template.

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:

  • CodePipeline untuk orkestrasi pipa penyebaran.

  • Sebuah CodeCommit repositori untuk menyimpan skrip bash dan file input. Skrip bash digunakan untuk membandingkan gambar kontainer IDs di repositori publik dan pribadi untuk menemukan duplikasi. Pemeriksaan ini dilakukan di semua repositori dalam yang ditentukan Akun AWS dalam satu. Wilayah AWS

  • Sebuah CodeBuild proyek untuk memanggil skrip bash untuk mengidentifikasi gambar yang sudah ada di repositori Amazon ECR.

  • Peran IAM yang diperlukan untuk memungkinkan akses.

  • Bucket S3 untuk menyimpan file output yang berisi gambar URIs.

  • Ember S3 lain untuk menyimpan CodePipeline artefak. 

Administrator AWS, AWS DevOps

Isi CodeCommit repositori.

Untuk mengisi CodeCommit repositori, lakukan langkah-langkah ini:

  1. Buka CodeCommit konsol dan arahkan ke Wilayah AWS tempat Anda membuat CloudFormation tumpukan.

  2. Temukan repositori yang Anda sediakan dengan menggunakan CloudFormation skrip dari daftar, pilih URL Kloning, lalu salin protokol URL HTTPS untuk terhubung ke repositori.

  3. Buka prompt perintah dan jalankan perintah git clone dengan URL HTTPS yang Anda salin pada langkah sebelumnya.

  4. Arahkan ke direktori root. Buat file bernama input.txt dan isi file ini dengan registri gambar publik Amazon ECR URIs yang ingin Anda cari di repositori Amazon ECR pribadi.

  5. Salin filescript.sh,buildspec.yml, dan input.txt dari salinan lokal GitHub repositori Solusi otomatis untuk mengidentifikasi gambar kontainer duplikat antara repositori ke repositori kloning. CodeCommit

  6. Unggah file ke CodeCommit dengan menggunakan perintah ini:

    git add . git commit -m "added input files" git push
Administrator AWS, AWS DevOps

Bersihkan.

Untuk menghindari timbulnya tagihan future, hapus sumber daya dengan mengikuti langkah-langkah berikut:

  1. Arahkan ke ember S3 yang menyimpan CodePipeline artefak, dan kosongkan ember.

  2. Arahkan ke bucket S3 yang menyimpan gambar duplikat URIs, dan kosongkan bucket.

  3. Arahkan ke CloudFormation konsol dan hapus tumpukan yang Anda buat untuk mengatur pipeline.

Administrator AWS

Pemecahan Masalah

IsuSolusi

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:

  • Komputer lokal Anda menjalankan sistem operasi yang tidak mendukung manajemen kredensi, atau tidak memiliki utilitas manajemen kredenal yang diinstal.

  • Kredensi Git untuk pengguna IAM Anda belum disimpan ke salah satu sistem manajemen kredensi ini.

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 dalam CodeCommit dokumentasi dan Penyimpanan Kredenal 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:

  • Anda telah mengautentikasi ke Wilayah yang berbeda. Untuk informasi selengkapnya, lihat Autentikasi registri pribadi di dokumentasi Amazon ECR.

  • Anda telah mengautentikasi untuk mendorong ke repositori yang tidak memiliki izin untuk Anda. Untuk informasi selengkapnya, lihat Kebijakan repositori pribadi di dokumentasi Amazon ECR.

  • Token Anda telah kedaluwarsa. Periode kedaluwarsa default untuk token yang diperoleh dengan menggunakan GetAuthorizationToken operasi adalah 12 jam.

Sumber daya terkait

Informasi tambahan

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" } } ]