Manifes Docker menggambarkan lapisan di dalam gambar. Sebuah manifes memungkinkan perbandingan yang tepat dari dua gambar, bahkan jika mereka memiliki tag yang berbeda.
Manifes diekspresikan dalam JSON dan berisi informasi tentang lapisan dan arsitektur gambar. Klien Docker menggunakan manifes untuk mengetahui apakah gambar kompatibel dengan perangkat saat ini. Kemudian menggunakan informasi tersebut untuk menentukan cara memulai penampung baru.
Format Manifes
Skema manifes saat ini berada di versi 2. File lengkap akan mendeklarasikan versi skemanya dan kemudian daftar entri manifes yang tersedia untuk gambar. Setiap entri mewakili varian gambar yang berbeda, seperti x86 dan ARM64.
Anda dapat melihat manifes gambar apa pun menggunakan docker manifest inspect
memerintah. Ini berfungsi dengan gambar lokal dan gambar yang disimpan di registri jarak jauh seperti Docker Hub.
docker manifest inspect my-image:latest
Manifes adalah daftar lapisan yang disertakan dalam gambar. Anda dapat melihat hash dari konten layer dan ukuran keseluruhannya.
Jika Anda menambahkan --verbose
bendera, Anda akan mendapatkan lebih banyak informasi tentang gambar. Ini termasuk tag gambar (di Ref
field), arsitekturnya, dan sistem operasinya.
Docker tidak akan memuat detail manifes dari registry yang tidak aman secara default. Jika Anda perlu menggunakan registri yang tidak diamankan dengan benar, tambahkan --insecure
tandai ke docker manifest
perintah.
Manifes dan Build Multi-Arch
Secara historis, Docker tidak mendukung banyak arsitektur gambar. Gambar hanya dapat digunakan pada mesin dengan arsitektur yang sama dengan yang dibangun. Ini dengan cepat terbukti membatasi karena Docker menemukan lebih banyak penggunaan di lingkungan server dan pada mesin berbasis ARM yang lebih baru.
Selain memungkinkan identifikasi gambar yang unik, manifes memfasilitasi pembuatan multi-arsitektur. Jika Anda memeriksa gambar yang mendukung banyak arsitektur, Anda akan melihat keluaran manifes yang agak berbeda:
docker manifest inspect php:latest
Menjalankan perintah di atas akan menampilkan manifes untuk image resmi PHP Docker. Anda dapat melihat dari tangkapan layar bahwa beberapa opsi platform tersedia, termasuk AMD64 dan ARM. Kami telah memotong daftar lengkap yang sebenarnya mencakup delapan arsitektur berbeda yang didukung.
Manifes memungkinkan pembuat gambar mengiklankan dukungan untuk beberapa arsitektur di bawah satu tag gambar. Klien Docker memilih versi gambar yang sesuai untuk platformnya, berdasarkan opsi dalam daftar. Penulis diharapkan hanya akan mengelompokkan gambar yang menawarkan fungsionalitas yang sama – tidak boleh ada perubahan di luar arsitektur target atau sistem operasi.
Setiap arsitektur dalam daftar mengacu pada lainnya bermanifestasi melalui digest
bidang. Manifes yang direferensikan akan menjadi file arsitektur tunggal biasa. Docker mencocokkan platform saat ini dengan manifes lengkung tunggal yang tepat, lalu memuat file tersebut untuk menentukan daftar akhir lapisan gambar.
Anda dapat membuat gambar multi-arsitektur secara manual menggunakan docker manifest
memerintah. Bangun masing-masing gambar individual dan dorong ke registri. Kemudian gunakan docker manifest create
perintah untuk menggabungkan gambar menjadi manifes bersama yang baru di bawah satu tag.
# on an AMD64 machine docker build -t my-image:amd64 . docker push my-image:amd64 # on an ARM machine docker build -t my-image:arm . docker push my-image:arm # now combine the manifests docker manifest create my-image:latest --amend my-image:x64 --amend my-image:arm docker manifest push my-image:latest
Menggunakan manifest create
dengan --amend
flag memungkinkan Anda menggabungkan beberapa manifes independen menjadi satu. Manifes terakhir kemudian didorong ke Docker Hub dengan latest
menandai. Pengguna AMD64 dan ARM akan dapat membuat container dari image ini.
Merakit gambar multi-lengkungan secara manual tidak wajib. Anda dapat menggunakan buildx
perintah untuk menyederhanakan proses secara signifikan.
docker buildx build --platform linux/amd64,linux/arm64/v8 --tag my-image:latest
Perintah tunggal ini menghasilkan gambar yang berfungsi pada platform AMD64 dan ARM64. Di bawah tenda, itu masih menghasilkan daftar manifes multi-lengkungan, jadi sangat membantu untuk memahami cara kerja bagian dalam bagaimana gambar ditautkan bersama.
Menganotasi Manifes
Docker memungkinkan Anda mengganti data manifes secara manual melalui anotasi. Bidang yang didukung mencakup arsitektur dan informasi sistem operasi.
Gunakan docker manifest annotate
perintah untuk mengatur anotasi. Jika Anda membuat anotasi pada gambar arsitektur tunggal, berikan tag gambar yang merujuknya. Untuk gambar multi-lengkungan, Anda memerlukan tag gambar keseluruhan dan tag manifes individu dalam daftar manifes multi-lengkungan.
docker manifest annotate my-image:latest my-image:amd64 --os-version linux
Perintah ini menandai versi AMD64 dari my-image:latest
image sebagai wadah berbasis Linux.
Anotasi sering kali tidak perlu diatur dengan tangan. Mereka biasanya disimpulkan secara otomatis dari lingkungan build. Anda dapat menggunakan annotate
perintah untuk menambahkan bidang yang hilang atau mengubah konfigurasi gambar di masa mendatang.
Ringkasan
Manifes Docker menggambarkan lapisan gambar dan arsitektur yang didukungnya. Manifes dapat berupa arsitektur tunggal, mendukung platform tertentu, atau multi-arsitektur. Dalam kasus terakhir, file berisi daftar referensi ke manifes lengkung tunggal yang disertakan.
Interaksi manual dengan manifes seharusnya jarang terjadi tetapi dimungkinkan dengan docker manifest
kelompok perintah. Sekarang lebih umum untuk mengotomatiskan build multi-lengkungan melalui Buildx, yang menawarkan pengalaman perakitan manifes yang disederhanakan.