Jika kita melihat lebih dekat pada produk LEGO®, kita dapat melihat bahwa semuanya terbuat dari bahan penyusun yang sama. Namun, komposisi balok-balok ini adalah pembeda utama apakah kita sedang membangun kastil atau kapal luar angkasa. Ini hampir sama untuk Podman, dan proyek saudaranya Buildah, Skopeo, dan CRI-O. Namun, alih-alih plastik daur ulang, bahan penyusun alat kontainer kami terbuat dari kode sumber terbuka. Berbagi blok pembangun ini memungkinkan kami menyediakan alat kontainer kelas perusahaan yang kokoh. Fitur dikirimkan lebih cepat, bug diperbaiki lebih cepat, dan kode telah teruji pertempuran. Dan, yah, alih-alih menghadirkan kegembiraan ke dalam ruang bermain, alat penampung membawa kegembiraan ke pusat data dan stasiun kerja.
Blok bangunan paling dasar untuk alat container kami adalah container/pustaka penyimpanan, yang secara lokal menyimpan dan mengelola container dan gambar container. Naik satu tingkat lebih tinggi, kami menemukan perpustakaan wadah/gambar. Seperti namanya, perpustakaan ini berurusan dengan gambar kontainer dan sangat kuat. Hal ini memungkinkan kita untuk menarik dan mendorong gambar, memanipulasi gambar (misalnya, mengubah kompresi lapisan), memeriksa gambar bersama dengan konfigurasi dan lapisannya, dan menyalin gambar di antara apa yang disebut transport gambar. Transportasi dapat merujuk ke penyimpanan kontainer lokal, registri kontainer, arsip tar, dan banyak lagi. Dan Walsh menulis posting blog yang bagus tentang berbagai transportasi yang sangat saya rekomendasikan untuk dibaca.
Pustaka gambar juga mendukung beberapa file konfigurasi di mana, tanpa ragu, registries.conf
adalah yang paling penting bagi sebagian besar pengguna. Saya ingin mendedikasikan posting blog ini untuk registries.conf
file konfigurasi, jelaskan berbagai opsi dan kenopnya, dan bagaimana kita dapat menggunakannya dalam produksi.
Mengelola pendaftar container dengan registryes.conf
registries.conf
konfigurasi sedang dimainkan setiap kali kita mendorong atau menarik gambar. Atau, secara umum, setiap kali kami menghubungi pendaftar penampung. Itu aturan praktis yang mudah. Lokasi seluruh sistem adalah /etc/containers/registries.conf
, tetapi jika Anda ingin mengubahnya untuk satu pengguna, Anda dapat membuat file baru di $HOME/.config/containers/registries.conf
.
Jadi mari kita selami itu. Pada bagian berikut, kita akan membahas beberapa contoh yang menjelaskan berbagai opsi konfigurasi di registries.conf
. Contohnya adalah skenario dunia nyata dan dapat menjadi sumber inspirasi untuk menangani kasus penggunaan individual Anda.
Mengambil dengan nama pendek
Manusia malas, dan saya tidak terkecuali untuk itu. Jauh lebih nyaman untuk melakukan podman pull ubi8
daripada podman pull registry.access.redhat.com/ubi8:latest
. Saya terus lupa gambar mana yang hidup di registri mana, dan ada banyak gambar dan banyak registri di luar sana. Ada Docker Hub dan Quay.io, plus registry untuk Amazon, Microsoft, Google, Red Hat, dan banyak distribusi Linux lainnya.
Docker mengatasi kemalasan kami dengan selalu memutuskan ke Docker Hub. Sebuah docker pull alpine
akan memutuskan ke docker.io/library/alpine:latest
, dan docker pull repo/image:tag
akan memutuskan ke docker.io/repo/image:tag
(perhatikan repo yang ditentukan). Podman dan proyek saudaranya tidak ingin mengunci pengguna untuk menggunakan satu registri saja, jadi nama pendek dapat diselesaikan lebih dari docker.io, dan seperti yang Anda harapkan, kami dapat mengonfigurasinya di registries.conf
sebagai berikut:
unqualified-search-registries = ['registry.fedoraproject.org', 'registry.access.redhat.com', 'registry.centos.org', 'docker.io']
Cuplikan di atas diambil langsung dari registries.conf
di Fedora 33. Ini adalah daftar pendaftar yang dihubungi dalam urutan yang ditentukan saat menarik gambar nama pendek. Jika gambar tidak dapat ditemukan di registri pertama, Podman akan mencoba menarik dari registri kedua dan seterusnya. Buildah dan CRI-O mengikuti logika yang sama tetapi perhatikan bahwa Skopeo selalu dinormalisasi ke docker.io.
[ Anda mungkin juga menyukai: Apa beban kerja Linux berikutnya yang Anda rencanakan untuk ditampung? ]
Mencari gambar
Mirip dengan bagian sebelumnya tentang menarik, gambar biasanya dicari berdasarkan nama. Saat melakukan podman search
, Saya biasanya tidak tahu atau hanya lupa di registri mana gambar yang diberikan hidup. Saat menggunakan Docker, Anda hanya dapat mencari di Docker Hub. Podman memberi lebih banyak kebebasan kepada pengguna dan memungkinkan untuk mencari gambar di registri apa pun. Dan tidak mengherankan, registries.conf
punya solusinya.
Mirip dengan menarik, unqualified-search-registries
juga digunakan saat menggunakan nama pendek dengan podman search
. podman search foo
akan mencari gambar bernama foo di semua registry pencarian yang tidak memenuhi syarat.
Perusahaan besar biasanya memiliki pendaftar kontainer di tempat. Mengintegrasikan registry semacam itu dalam alur kerja Anda semudah menambahkannya ke daftar registry pencarian yang tidak memenuhi syarat.
Alias nama pendek
Versi Podman, Buildah, dan CRI-O yang lebih baru dikirimkan dengan cara baru untuk menyelesaikan nama pendek, terutama dengan menggunakan alias. Alias adalah tabel TOML sederhana [aliases]
dalam bentuk "name" = "value"
, mirip dengan cara kerja alias Bash. Kami memelihara daftar pusat alias bersama dengan komunitas upstream di github.com/containers/shortnames
. Jika Anda memiliki gambar dan ingin memiliki alias, silakan buka pull request atau hubungi kami.
Beberapa distribusi, seperti RHEL8, berencana mengirimkan daftar nama pendek mereka sendiri untuk membantu pengguna dan mencegah mereka secara tidak sengaja menarik gambar dari registri yang salah.
Menjelaskan cara kerja alias nama pendek secara mendetail akan memperluas entri blog ini secara signifikan, jadi jika Anda tertarik, lihat entri blog sebelumnya tentang alias nama pendek.
Mengonfigurasi registri penampung lokal
Menjalankan registri kontainer lokal cukup umum. Saya memiliki satu yang berjalan sepanjang waktu, jadi saya dapat menyimpan gambar dan mengembangkan serta menguji fitur-fitur baru seperti pembaruan otomatis di Podman. Bandwidth di kantor rumah saya terbatas, jadi saya menghargai dorongan dan tarikan yang cepat. Karena semuanya berjalan secara lokal, saya tidak perlu khawatir tentang pengaturan TLS untuk registri. Itu berarti menghubungkan ke registri melalui HTTP daripada melalui HTTPS. Podman memungkinkan Anda melakukannya dengan menentukan --tls-verify=false
pada baris perintah, yang akan melewati verifikasi TLS dan mengizinkan koneksi yang tidak aman.
Pendekatan alternatif untuk melewatkan verifikasi TLS melalui baris perintah adalah dengan menggunakan registries.conf
. Ini mungkin lebih nyaman, terutama untuk skrip otomatis di mana kita tidak ingin menambahkan flag baris perintah secara manual. Mari kita lihat cuplikan konfigurasi di bawah ini.
[[registry]]
location="localhost:5000"
insecure=true
Format registryes.conf adalah TOML. Kurung ganda [[registry]]
menunjukkan bahwa kita dapat menentukan daftar (atau tabel) dari [registry]
objek. Dalam contoh ini, hanya ada satu registri di mana lokasi (yaitu, alamatnya) diatur ke localhost:5000
. Di situlah registri lokal biasanya berjalan. Kapan pun containers/image
perpustakaan terhubung ke registri wadah dengan lokasi itu, itu akan mencari konfigurasinya dan bertindak sesuai. Dalam hal ini, registri dikonfigurasikan agar tidak aman, dan verifikasi TLS akan dilewati. Podman dan alat penampung lainnya sekarang dapat berbicara dengan registri lokal tanpa koneksi ditolak.
Memblokir registri, namespace, atau gambar
Jika Anda ingin mencegah pengguna atau alat menarik dari registri tertentu, Anda dapat melakukan hal berikut.
[[registry]]
location="registry.example.org"
blocked=true
blocked=true
mencegah koneksi ke registri ini, atau setidaknya memblokir pengambilan data darinya.
Namun, sangat umum di antara pengguna untuk memblokir hanya ruang nama tertentu atau gambar individu tetapi tidak seluruh registri. Mari kita asumsikan bahwa kita ingin menghentikan pengguna menarik gambar dari namespace registry.example.org/namespace
. registries.conf
sekarang akan terlihat seperti ini:
[[registry]]]
location="registry.example.org"
prefix="registry.example.org/example"
blocked=true
Saya baru saja memperkenalkan kenop konfigurasi baru:prefix
. Awalan hanya menginstruksikan untuk memilih konfigurasi yang ditentukan ketika kami mencoba menarik gambar yang cocok dengan awalan tertentu. Misalnya, jika kita menjalankan podman pull registry.example.org/example/image:latest
, awalan yang ditentukan akan cocok, dan Podman akan diblokir untuk menarik gambar. Jika Anda ingin memblokir gambar tertentu, Anda dapat mengaturnya menggunakan yang berikut:
prefix="registry.example.org/namespace/image"
Menggunakan awalan adalah alat yang sangat ampuh untuk memenuhi semua jenis kasus penggunaan. Itu dapat digabungkan dengan semua tombol dari [registry]
. Perhatikan bahwa menggunakan awalan adalah opsional. Jika tidak ada yang ditentukan, awalan akan default ke lokasi (wajib).
Mencerminkan registri
Mari kita asumsikan bahwa kita menjalankan beban kerja kita di lingkungan dengan celah udara. Semua server kami terputus dari internet. Ada banyak alasan untuk itu. Kami mungkin berjalan di tepi atau berjalan di lingkungan yang sangat sensitif terhadap keamanan yang melarang kami terhubung ke internet. Dalam hal ini, kami tidak dapat terhubung ke registri asli tetapi perlu menjalankan registri yang mencerminkan konten jaringan lokal.
Cermin registri adalah registri yang akan dihubungi sebelum mencoba menarik dari yang asli. Ini adalah kasus penggunaan umum dan salah satu permintaan fitur tertua di ekosistem container.
[[registry]]
location="registry.access.redhat.com"
[[registry.mirror]]
location="internal.registry.mirror"
Dengan konfigurasi ini, saat menarik Universal Base Image melalui podman pull ubi8
, gambar akan ditarik dari cermin, bukan dari registri kontainer Red Hat.
Perhatikan bahwa kita dapat menentukan beberapa cermin yang akan dihubungi dalam urutan yang ditentukan. Mari kita lihat sekilas apa artinya:
[[registry]]
location="registry.example.com"
[[registry.mirror]]
location="mirror-1.com"
[[registry.mirror]]
location="mirror-2.com"
[[registry.mirror]]
location="mirror-3.com"
Mari kita asumsikan kita mencoba menarik gambar registry.example.com/myimage:latest
. Mirror dihubungi dalam urutan yang ditentukan (yaitu, top-down), yang berarti bahwa Podman pertama-tama akan mencoba menarik gambar dari mirror-1.com
. Jika gambar tidak ada atau penarikan gagal karena alasan lain, Podman akan menghubungi mirror-2.com
Dan seterusnya. Jika semua penarikan mirror gagal, Podman akan menghubungi registry.example.com
utama .
Perhatikan bahwa mirror juga mendukung insecure
tombol. Jika Anda ingin melewati verifikasi TLS untuk mirror tertentu, cukup tambahkan insecure=true
.
Memetakan ulang referensi
Seperti yang kita jelajahi di atas, sebuah prefix
digunakan untuk memilih [registry]
tertentu di registries.conf
. Sementara awalan adalah cara yang ampuh untuk memblokir ruang nama tertentu atau gambar tertentu agar tidak ditarik, mereka juga dapat digunakan untuk memetakan kembali seluruh gambar. Mirip dengan mirror, kita dapat menggunakan awalan untuk menarik dari registri yang berbeda dan namespace yang berbeda.
Untuk mengilustrasikan apa yang saya maksud dengan memetakan ulang , mari kita pertimbangkan bahwa kita berlari di lingkungan dengan celah udara. Kami tidak dapat mengakses pendaftar kontainer karena kami terputus dari internet. Beban kerja kami menggunakan gambar dari Quay.io, Docker Hub, dan registri kontainer Red Hat. Meskipun kami dapat memiliki satu mirror lokal jaringan per registri, kami juga dapat menggunakannya dengan konfigurasi berikut.
[[registry]]
prefix="quay.io"
location="internal.registry.mirror/quay"
[[registry]]
prefix="docker.io"
location="internal.registry.mirror/docker"
[[registry]]
prefix="registry.access.redhat.com"
location="internal.registry.mirror/redhat"
podman pull quay.io/buildah/stable:latest
sekarang akan menarik internal.registry.mirror/quay/buildah/stable:latest
. Namun, gambar yang ditarik akan tetap quay.io/buildah/stable:latest
karena pemetaan ulang dan pencerminan terjadi secara transparan pada Podman dan alat penampung lainnya.
Seperti yang bisa kita lihat pada cuplikan di atas, internal.registry.mirror
adalah mirror lokal jaringan kami yang kami gunakan untuk menarik gambar atas nama Quay.io, Docker Hub, dan registri kontainer Red Hat. Gambar dari setiap registri berada di ruang nama terpisah pada registri (yaitu, "quay", "docker", "redhat")—trik sederhana namun kuat untuk memetakan ulang gambar saat menarik. Anda mungkin bertanya pada diri sendiri bagaimana kami dapat mengisi cermin internal terlebih dahulu dengan gambar dari tiga registri. Saya tidak menyarankan melakukan itu secara manual tetapi menggunakan skopeo sync
sebagai gantinya. Dengan skopeo sync
, sysadmin dapat dengan mudah memuat semua gambar ke drive USB, membawanya ke cluster air-gapped, dan melakukan pramuat mirror.
Ada banyak kasus penggunaan di mana pemetaan ulang semacam itu dapat membantu. Misalnya, saat menggunakan registri lain selama pengujian, mungkin berguna untuk menarik secara transparan dari registri lain (pengujian atau pementasan) daripada dalam produksi. Tidak diperlukan perubahan kode.
Tom Sweeney dan Ed Santiago menggunakan pemetaan ulang untuk mengembangkan solusi kreatif untuk mengatasi batas kecepatan Docker Hub. Pada akhir November 2020, Docker Hub mulai membatasi jumlah penarikan per pengguna dalam jangka waktu tertentu. Pada awalnya, kami khawatir karena sebagian besar sistem pengujian kami, dan integrasi berkelanjutan menggunakan gambar Docker Hub. Tetapi dengan perubahan sederhana pada registries.conf
pada sistem kami, Tom dan Ed menemukan solusi yang bagus. Itu menghindarkan kami dari tugas manual dan membosankan untuk mengubah semua gambar yang merujuk ke docker.io dalam pengujian kami.
Manajemen konfigurasi lanjutan melalui file konfigurasi drop-on
Mengelola konfigurasi itu menantang. Sistem kami diperbarui setiap saat, dan dengan pembaruan tersebut dapat terjadi perubahan konfigurasi. Kami mungkin ingin menambahkan registry baru, mengkonfigurasi mirror baru, memperbaiki pengaturan sebelumnya atau memperluas konfigurasi default Fedora. Ada banyak motivasi, dan yang pasti registries.conf
mendukungnya melalui apa yang disebut file konfigurasi drop-in.
Saat memuat konfigurasi, containers/image
library pertama-tama akan memuat file konfigurasi utama di /etc/containers/registries.conf
lalu semua file di /etc/containers/registries.conf.d
direktori dalam urutan alfanumerik.
Menggunakan registries.conf
drop-in seperti itu file lurus ke depan. Cukup tempatkan .conf
file di direktori, dan Podman akan mendapatkan konfigurasi yang diperbarui. Perhatikan bahwa tabel dalam konfigurasi digabungkan sementara tombol sederhana diganti. Ini berarti, dalam praktiknya, bahwa [[registry]]
tabel dapat dengan mudah diperpanjang dengan pendaftar baru. Jika registri dengan awalan yang sama sudah ada, pengaturan registri akan diganti. Hal yang sama berlaku untuk [aliases]
meja. Kenop konfigurasi sederhana seperti unqualified-search-registries selalu diganti.
[ Memulai container? Lihat kursus gratis ini. Menyebarkan aplikasi kemas:Tinjauan teknis. ]
Kesimpulan
registries.conf
adalah blok bangunan inti dari alat kontainer kami. Ini memungkinkan untuk mengonfigurasi semua jenis properti saat berbicara dengan registri kontainer. Jika Anda tertarik untuk mempelajari konfigurasi secara lebih rinci, Anda dapat melakukan man containers-registries.conf
ke halaman baca manual di mesin Linux Anda atau kunjungi dokumentasi upstream.