GNU/Linux >> Belajar Linux >  >> Linux

Cara meringankan beban pada registri kontainer Anda menggunakan Quay.io

Dalam posting ini, saya menunjukkan kepada Anda bagaimana menggunakan Quay.io untuk meng-host gambar kontainer, dan bagaimana menghindari pajak yang berlebihan pada registri kontainer Anda dengan membatasi permintaan gambar yang tidak perlu. Saya menggunakan Buildah, Skopeo, dan Quay.io, tetapi tips untuk membatasi pengambilan gambar akan bekerja dengan registri penampung apa pun yang mungkin Anda gunakan.

Pada akhir November 2020, Docker Hub mulai membatasi atau membatasi jumlah gambar container yang dapat Anda tarik secara anonim atau sebagai Hub Docker Gratis pengguna. Jika Anda seorang anonim pengguna, Anda hanya dapat menarik 100 gambar kontainer dalam periode 6 jam. Jika Anda pengguna Docker Hub Gratis, Anda dapat menarik 200 gambar container dalam periode 6 jam.

Saat kami melakukan pengujian fungsional alat container yang kami kerjakan, seperti Buildah dan Podman, batas ini umumnya tidak menjadi masalah. Misalnya, saat Anda membuat image container menggunakan Containerfile, lalu menguji container yang dihasilkan untuk melihat bagaimana perilakunya setelah Anda menjalankan perintah tertentu padanya, biasanya Anda menarik image container utama yang ditentukan di FROM instruksi dalam Containerfile satu kali. Jika nanti Anda membangun kembali wadah dari awal, Anda biasanya menggunakan kembali gambar wadah yang sudah ditarik dan oleh karena itu tidak memukul konter. Dalam skenario ini, pelambatan tidak menyebabkan rasa sakit, tetapi selalu ada di benak saya.

Pengurangan awal interaksi Docker Hub

Kami memang menemukan tempat di mana kami mengalami pelambatan di Docker Hub. Ed, kolega saya dan salah satu pemimpin QE mesin kontainer, membuat solusi yang sangat bagus untuk itu. Pertama, sedikit latar belakang. Beberapa bulan yang lalu, Ed mengurangi berapa kali kami mengambil gambar kontainer yang digunakan pengujian Buildah Continuous Integration (CI) dengan menggunakan kembali cache yang telah dibuat Podman. Sebelum ini, Buildah CI menyalahgunakan alpine yang malang container image yang ada di Docker Hub di docker.io/library tanpa akhir, bersama dengan fedora , busybox , dan beberapa gambar kontainer lainnya di sana, menariknya berkali-kali. Skema prefetching yang dikerjakan Ed ini tidak hanya mempercepat pengujian kami, tetapi juga memungkinkan kami untuk mengurangi bandwidth yang kami gunakan di Docker Hub.

Terlepas dari perubahan ini, Buildah CI mulai gagal beberapa kali sehari di bulan November dengan kesalahan ini:Anda telah mencapai batas kecepatan tarik . Mencapai batas kecepatan disebabkan oleh berapa kali pengujian CI kami berjalan setiap hari. Meskipun prefetching telah mengurangi berapa kali Buildah CI diperlukan untuk menarik gambar, CI masih menjalankan pelambatan Docker Hub.

[ Anda mungkin juga ingin membaca: Cara menerapkan registry image container Linux pribadi/pribadi sederhana untuk penggunaan internal ]

Memecahkan pelambatan

Solusi yang diberikan Ed memanfaatkan fleksibilitas Buildah dan alat container di bawah repositori Containers di GitHub. Pertama, Ed membuat akun gratis di quay.io, menyalin gambar di sana, dan mempublikasikannya. Ed memilih quay.io karena di sanalah kami menyimpan banyak gambar kontainer kami, dan itu nyaman bagi kami. Namun, itu bisa saja repositori image container lokal atau repositori perusahaan lain.

Sebagai bonus, quay.io tidak dibatasi seperti Docker Hub.

Menggunakan Skopeo untuk menyalin gambar awal

Katakanlah proyek Anda memerlukan alpine dan centos:8 gambar-gambar. Anda akan mulai dengan membuat akun gratis di quay.io, dengan nama myquayaccountname . Pada host dengan Skopeo terinstal, Anda kemudian akan menjalankan:

skopeo login -u myquayaccountname quay.io
skopeo copy --all docker://docker.io/library/alpine:latest docker://quay.io/myquayaccountname/alpine:latest

Kemudian ulangi, ganti alpine:latest dengan centos:8 , dan seterusnya untuk semua gambar yang dibutuhkan.

Konfigurasikan quay.io

Gambar sekarang ada di quay.io, tetapi secara default bersifat pribadi. Untuk menjadikannya publik, masuk kembali ke UI web quay.io, klik setiap nama gambar. Itu akan membawa Anda ke halaman baru yang menampilkan detail gambar. Klik ikon roda gigi di bagian bawah bilah navigasi kiri, temukan Jadikan Publik tombol, dan tekan. Anda perlu mengonfirmasi Oke lalu ulangi untuk semua gambar yang menampilkan ikon kunci merah muda.

Dalam kasus kami, hal pertama yang Ed lakukan adalah menarik image container yang kita gunakan dari Docker Hub dan menempatkannya ke dalam repositori image container libpod di quay.io yang telah dia buat.

Konfigurasikan registryes.conf untuk pencerminan

Kami memecahkan masalah pelambatan dengan memindahkan gambar-gambar itu. Namun, kami sekarang memiliki masalah dalam mengubah ratusan bahkan ribuan referensi pengujian ke gambar tersebut sehingga CI akan menarik dari quay.io/libpod daripada docker.io/library . Perubahan yang diperlukan ini adalah pameran yang sempurna untuk fleksibilitas yang dimiliki alat kontainer. Ed mengatasi hal ini dengan perubahan konfigurasi yang relatif kecil, daripada mengubah semua pengujian secara global.

Inilah yang Ed kerjakan. Saat Buildah mencari gambar kontainer, itu tidak di-hardcode untuk hanya menarik dari docker.io. Sebagai gantinya, ia membaca /etc/containers/registries.conf dan menentukan dari mana repositori gambar kontainer yang harus diambil Buildah.

Ed hanya mengubah file itu sehingga quay.io/libpod dihubungi setiap kali tes mencari docker.io/library . Menggunakan contoh kami dari atas, Anda akan menambahkan baris berikut ke /etc/containers/registries.conf di semua sistem tempat Anda ingin menggunakan cache:

toml
[[registry]]
prefix=" docker.io/library"
location=" quay.io/myquayaccountname"

Semua podman pull alpine berikutnya perintah akan diambil dari cermin Anda. Anda dapat melihat perubahan yang dibuat Ed untuk Podman di sini di Permintaan Tarik ini.

Untuk lebih menyoroti kemampuan pencerminan dalam proyek wadah/gambar, yang digunakan Buildah, Anda dapat mengatur cermin untuk gambar wadah yang memungkinkan Anda untuk menarik dengan nama lama dari registri yang berbeda. Pencerminan pada awalnya ditambahkan untuk mendukung lingkungan yang terputus. Lingkungan tanpa konektivitas internet yang menjalankan perangkat lunak seperti OpenShift sering kali tidak dapat menarik gambar dari registry non-lokal, jadi kami mengizinkan pengguna untuk mencerminkan gambar di registry internal tanpa perlu mengubah perangkat lunak.

Berikut cuplikan dengan informasi lebih lanjut dari containers-registries.conf file, yang merupakan bagian dari container/image proyek:

$ man containers-registries.conf

   Remapping and mirroring registries
       The user-specified image reference is, primarily, a "logical" image  name,  always
       used for naming the image.  By default, the image reference also directly specifies
       the registry and repository to use, but the following options can be used to  redi‐
       rect  the  underlying  accesses to different registry servers or locations (e.g., to
       support configurations with no access to the  internet  without  having  to  change
       Dockerfiles, or to add redundancy).

Peringatan :Prosedur ini melakukan salinan gambar kontainer satu kali. Gambar cache Anda tidak akan secara ajaib mengambil perbaikan keamanan yang didorong ke docker.io. (Itu juga tidak akan mengambil vandalisme acak seperti binari yang dihapus atau perubahan yang melanggar lainnya—jangan mulai saya.)

Pekerjaan lebih lanjut

Mengingat peringatan, pemeliharaan gambar terserah Anda sekarang, dan Anda mungkin mempertimbangkan untuk menambahkan perintah Skopeo untuk menyalin gambar ke awal prosedur pengujian Anda. Solusi lain yang mungkin adalah mengaktifkan mirror publik seperti Google Cloud Registry (GCR) atau mungkin menyempurnakan registries.conf lebih lanjut. file untuk mengatur beberapa cermin. Lebih baik lagi, ini mungkin sangat cocok untuk perintah skopeo-sync karena memiliki CLI yang bagus dan dapat digunakan dengan file YAML yang menawarkan beragam opsi konfigurasi.

[ Memulai container? Lihat kursus gratis ini. Menyebarkan aplikasi kemas:Tinjauan teknis. ]

Menutup

Ada berbagai cara untuk mengatasi pelambatan Docker Hub yang diterapkan, tetapi metode yang digunakan Ed cepat, tidak menyakitkan, dan membuat CI kami kembali online dengan cepat. Sekarang kami memiliki ruang untuk bernapas, kami dapat mengerjakan solusi yang lebih lengkap.

Dengan perubahan ini, pengujian Buildah tidak lagi melampaui batas dan menekan pelambatan dari Docker Hub, sehingga masalah pelambatan terpecahkan.


Linux
  1. Bagaimana Menganalisis Dan Membandingkan Gambar Kontainer Menggunakan Container-diff

  2. Cara Mencadangkan Situs Anda Menggunakan Repositori FTP Pribadi

  3. Bagaimana cara mengubah versi PHP di domain Anda menggunakan cPanel?

  1. Cara mengubah warna terminal Linux Anda

  2. Bagaimana mengelola pendaftar penampung Linux

  3. Cara mencadangkan dan memulihkan situs web Anda menggunakan utilitas pencadangan LCN

  1. Cara membersihkan data Anda di baris perintah

  2. Cara Menguji Situs Anda Menggunakan File Host

  3. Cara Menyimpan Bagan Helm di Azure Container Registry