GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Apa itu Manifes Gambar Docker?

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.


Docker
  1. Apa itu Docker (dan wadah Linux?)

  2. Ekstrak File Dari Gambar Docker?

  3. Cara Memodifikasi Gambar Docker

  1. Cara Menggunakan Dockerfile untuk Membangun Gambar Docker

  2. Apa yang Baru di Docker Compose v2?

  3. Memperbarui container yang di-deploy berdasarkan image Docker

  1. Apa itu gambar emas?

  2. Cara melakukan perubahan pada gambar Docker

  3. Apa yang ada di dalam gambar/wadah Docker?