Apa Itu Container Registry? Tempat Container Image Disimpan dan Dibawa ke Mana-mana

Container registry itu gudang penyimpanan buat container image — push image ke sana, lalu pull dari mana saja. Pelajari registry itu sebenarnya apa, cara kerja push dan pull, beda registry publik dan privat, serta bagaimana tag dan repository ditata.

Diterbitkan 19 Oktober 202611 menit bacaOleh ACY Partner Indonesia
Container registry — gudang yang menyimpan container image untuk di-push dan di-pull antar mesin
300 × 250Slot Iklan TersediaPasang iklan Anda di sini

Bayangkan kamu sudah membangun sebuah container image di laptopmu. Jalannya mulus, sempurna. Sekarang image yang sama persis itu harus berjalan di server produksi yang lokasinya nun jauh di seberang dunia — dan mungkin juga di mesin rekan timmu, lalu di tiga server lagi bulan depan. Pertanyaannya: bagaimana image itu berpindah dari tempat dia dibuat ke semua tempat yang membutuhkannya? Kamu tentu tidak mengirimnya lewat email satu per satu. Kamu push ke sebuah container registry, lalu semua orang pull dari sana.

Registry termasuk bagian infrastruktur yang gampang luput dari perhatian — sampai kamu sadar bahwa hampir semua alur kerja container diam-diam bersandar padanya. Begitu kamu paham apa yang dikerjakan sebuah registry, janji “build sekali, jalan di mana saja” yang dibawa container akhirnya tersambung dari ujung ke ujung. Jadi ayo kita telusuri dari dasar.

Container registry itu sebenarnya apa

Container registry adalah server yang tugasnya menyimpan dan menyebarkan container image. Anggap saja dia gudang buat image: kamu mengunggah satu image ke dalamnya, lalu nanti siapa pun yang punya izin bisa mengunduh image yang sama persis itu, tanpa beda satu byte pun, ke mesin mana saja.

Kalau kamu pernah pakai layanan hosting kode untuk menyimpan source code, gambarannya nyaris identik. Registry bagi container image itu seperti host kode bagi berkas source. Kamu push sebuah image ke atas untuk membagikannya, dan kamu pull sebuah image ke bawah untuk memakainya. Registry-lah yang memegang salinan resmi yang disepakati semua orang.

Kenapa ini penting? Sebuah container image adalah paket aplikasimu yang sudah dibekukan dan siap jalan — kodemu plus berkas sistem operasi, library, dan pengaturan yang persis dia butuhkan. Membangun image itu satu urusan. Membuatnya jalan di tempat lain adalah persoalan terpisah, dan registry-lah jawabannya. Tanpa registry, tiap mesin harus membangun ulang image-nya sendiri, dan kamu kehilangan jaminan bahwa mereka semua menjalankan barang yang sama persis.

Registry vs. repository vs. image — tiga kata yang bertingkat

Ketiganya sering ketuker, jadi mari kita kunci sekarang. Registry adalah keseluruhan layanannya (gudangnya). Di dalamnya, sebuah repository adalah kumpulan bernama yang menampung semua versi dari satu image tertentu — misalnya repository bernama web-app. Di dalam repository itu, tiap versi adalah sebuah image yang ditandai dengan tag, seperti web-app:1.4 atau web-app:latest. Jadi alamat lengkapnya terbaca sebagai registry / repository : tag. Satu registry menampung banyak repository; satu repository menampung banyak image yang punya tag berbeda.

Push dan pull: dua operasi yang paling penting

Hampir semua yang kamu lakukan dengan registry intinya mengerucut jadi dua kata kerja.

Push mengunggah sebuah image dari mesinmu ke registry. Ini kamu lakukan setelah membangun image, ketika kamu ingin image itu tersedia buat mesin lain. Registry menyimpannya dan memberinya alamat yang bisa dijangkau orang lain.

Pull mengunduh sebuah image dari registry ke mesin yang perlu menjalankannya. Server produksi mem-pull image-nya, lalu menyalakan container dari image itu. Rekan timmu mem-pull image yang sama untuk dijalankan di mesinnya sendiri, dan dia dapat lingkungan yang identik.

Ini alur khasnya, dari build sampai jalan di produksi:

   MESIN KAMU                   REGISTRY                  SERVER PRODUKSI
        │                          │                            │
        │  1. build image-nya      │                            │
        │ ─────────┐               │                            │
        │ ◄────────┘               │                            │
        │                          │                            │
        │  2. push image ─────────►│                            │
        │                          │  (menyimpan image-nya)     │
        │                          │                            │
        │                          │◄──── 3. pull image ────────│
        │                          │                            │
        │                          │     4. jalankan container ─│ ─────┐
        │                          │                            │ ◄────┘

Yang indah dari pola ini adalah pemisahan urusannya. Mesin yang membangun image dan mesin yang menjalankannya tidak pernah perlu bicara langsung satu sama lain. Registry duduk di tengah sebagai titik serah-terima yang netral. Justru inilah yang membuat pipeline deployment otomatis jadi mungkin: sebuah server build mem-push image baru, lalu satu atau banyak server yang menjalankan tinggal mem-pull-nya — tanpa perlu koordinasi apa pun selain “mereka berdua sama-sama tahu alamat registry-nya”.

Tag: cara kamu menunjuk versi tertentu

Tiap image di dalam sebuah repository dikenali lewat tag. Tag itu cuma label yang mudah dibaca manusia yang ditempelkan ke sebuah versi image tertentu — 1.4, 2.0.1, stable, latest. Saat mem-pull, kamu menyebut tag mana yang kamu mau, dan registry menyerahkan persis image itu kepadamu.

# pull versi spesifik yang sudah dipatok
pull registry.example.com/web-app:1.4

# pull apa pun yang saat ini ber-tag "latest"
pull registry.example.com/web-app:latest

Tag inilah cara kamu mengatur versi mana yang jalan di mana. Server produksimu bisa saja mem-pull web-app:1.4 supaya mereka tetap berada di rilis yang sudah dikenal dan teruji, sementara server staging mem-pull web-app:latest untuk menguji build terbaru. Ubah tag yang di-pull server-mu, deploy ulang, dan kamu sudah maju ke versi baru — atau mundur lagi.

`latest` bukan jaminan ajaib 'versi terbaru'

Tag latest adalah sumber kebingungan yang umum. Dia bukan penunjuk istimewa yang otomatis mengarah ke image yang benar-benar paling baru — dia cuma tag biasa yang kebetulan dinamai “latest”. Dia menunjuk ke image apa pun yang paling terakhir di-push dengan tag itu. Ada dua masalah yang menyertainya. Pertama, latest bisa berubah tanpa kamu sadari, jadi dua server yang mem-pull latest dengan jarak satu jam bisa saja dapat image yang berbeda — buruk buat reproduktibilitas. Kedua, kalau kamu tidak pernah mem-push tag latest, ya tag itu memang tidak akan ada. Untuk apa pun yang benar-benar kamu deploy, patok tag versi spesifik seperti 1.4 supaya kamu selalu tahu persis apa yang sedang berjalan.

Karena alasan yang sama, tim yang serius sering mem-pull image lewat digest-nya — sidik jari berbasis konten (sebuah hash panjang) dari byte image yang persis. Sebuah tag bisa dipindahkan untuk menunjuk image lain di kemudian hari; sebuah digest tidak bisa, karena dia adalah konten image itu sendiri. Mem-pull lewat digest menjamin kamu mendapat image yang sama byte demi byte setiap kali tanpa kecuali, dan inilah standar tertinggi untuk deployment yang bisa direproduksi.

Registry publik vs. privat

Registry hadir dalam dua corak besar, dan bedanya cuma soal siapa yang boleh mem-pull darinya.

Registry publik membolehkan siapa pun mengunduh image tanpa perlu login. Di sinilah base image resmi tinggal — image siap pakai yang minimalis untuk sistem operasi dan runtime bahasa pemrograman, yang di atasnya kamu bangun image-mu sendiri. Saat kamu memulai sebuah image “dari” base Linux atau dari runtime sebuah bahasa, base itu biasanya di-pull, secara terbuka, dari registry publik. Registry publik inilah cara ekosistem container berbagi balok-balok bangunan yang umum dipakai.

Registry privat mensyaratkan autentikasi — kamu harus login dulu sebelum bisa push atau pull. Di sinilah kamu menyimpan image aplikasi milikmu sendiri, yang berisi kode dan konfigurasi rahasiamu. Jelas kamu tidak mau barang itu bisa dibaca sembarang orang sedunia. Registry privat bisa berupa layanan berbayar, atau yang kamu jalankan sendiri di atas infrastrukturmu.

   REGISTRY PUBLIK                      REGISTRY PRIVAT
   ┌──────────────────┐                 ┌──────────────────┐
   │  base image OS   │                 │  app-kamu:1.4    │  🔒
   │  image bahasa    │                 │  api-kamu:2.0    │  🔒
   │  tools terbuka   │                 │  job-internal:9  │  🔒
   └──────────────────┘                 └──────────────────┘
   semua orang bisa pull                wajib login

Susunan yang sangat umum justru mencampur keduanya: kamu pull base image dari registry publik, membangun aplikasimu di atasnya, lalu push image aplikasi yang sudah jadi ke registry privat yang hanya bisa dijangkau timmu dan server-server-mu. Publik untuk bahan baku yang dipakai bersama, privat untuk produk jadimu.

Cara registry menyimpan image secara hemat

Kamu mungkin mengira tiap image disimpan sebagai satu berkas raksasa, padahal registry jauh lebih pintar dari itu — dan ini layak kamu tahu, karena menjelaskan kenapa push dan pull sering kali terasa mengejutkan cepat.

Sebuah container image dibangun dalam layer, yang ditumpuk satu di atas yang lain. Layer paling bawah bisa jadi base sistem operasi, layer berikutnya runtime bahasa, lalu dependensi yang kamu instal, dan layer paling atas adalah kodemu sendiri. Tiap layer disimpan terpisah di registry, dikenali lewat hash dari isinya.

Karena layer dipakai bersama dan dialamati berdasarkan kontennya, registry hanya pernah menyimpan satu salinan untuk tiap layer yang unik. Kalau sepuluh image-mu sama-sama dibangun di atas layer base OS yang sama, layer itu cuma disimpan sekali, bukan sepuluh kali. Dan saat kamu mem-pull sebuah image, kamu hanya mengunduh layer yang belum kamu punya secara lokal. Ubah satu baris kodemu, build ulang, lalu push — hanya layer teratas mungil yang berubah itulah yang benar-benar melintasi jaringan. Layer base yang besar, yang sudah ada di registry dan sudah ada di mesin tujuan, dilewati saja.

   IMAGE = tumpukan layer (tiap layer disimpan sekali, lewat hash)

   ┌────────────────────────┐  ← kodemu           (sering berubah, kecil)
   ├────────────────────────┤  ← dependensi       (kadang berubah)
   ├────────────────────────┤  ← runtime bahasa   (jarang berubah)
   └────────────────────────┘  ← base OS          (hampir tidak pernah)

   push/pull cuma memindah layer yang baru — sisanya dipakai ulang

Berbagi layer inilah salah satu alasan diam-diam kenapa container terasa begitu ringan dalam praktiknya. Pull pertama dari sebuah base yang masih segar mungkin lumayan besar, tapi tiap pull setelahnya kebanyakan tinggal memakai ulang yang sudah ada.

Di mana posisi registry dalam pipeline deployment

Dalam alur kerja nyata, registry adalah engsel antara membangun dan menjalankan. Bayangkan sebuah pipeline otomatis:

  1. Seorang developer mem-push kode baru ke proyek.
  2. Sebuah server build mengompilasinya lalu membangun container image yang segar, diberi tag dengan nomor versi yang baru.
  3. Server build itu mem-push image tadi ke registry.
  4. Langkah deployment menyuruh server produksi untuk mem-pull image baru dan me-restart container-nya dari image itu.

Perhatikan bahwa registry-lah yang membuat langkah 2 dan 4 bisa terjadi di mesin yang sama sekali berbeda, mungkin terpaut menit atau jam, dengan keyakinan penuh bahwa mereka menangani image yang identik. Dialah sumber kebenaran bersama. Inilah juga kenapa kontrol akses registry penting buat keamanan: siapa pun yang bisa mem-push ke registry-mu pada dasarnya bisa mengubah apa yang dijalankan server produksimu, jadi izin push dijaga ketat, dan server biasanya cuma diberi akses pull saja.

Registry adalah satu sumber kebenaran soal 'apa yang sedang jalan'

Saat ada yang rusak di produksi, salah satu pertanyaan paling berguna adalah “persisnya image mana yang sedang jalan?” Karena tiap container yang terdeploy berasal dari sebuah image ber-tag (atau, lebih baik lagi, dipatok lewat digest) di registry-mu, kamu bisa melacak container mana pun yang sedang berjalan langsung kembali ke sebuah artefak yang spesifik dan tak bisa diubah di registry — lalu dari situ ke kode persis yang membangunnya. Kemampuan menelusuri itu, dari container yang hidup sampai kembali ke byte di registry, adalah bagian besar dari kenapa registry jadi infrastruktur yang tidak bisa ditawar buat tim yang menjalankan container secara serius.

Kenapa registry penting

Container berjanji “build sekali, jalan di mana saja”, tapi janji itu hampa tanpa cara untuk memindahkan barang yang sudah dibangun dari tempat dia dibuat ke semua tempat yang dia tuju. Registry-lah cara itu. Dialah lapisan distribusi yang mengubah sebuah image lokal jadi sesuatu yang bisa dijalankan secara identik oleh seluruh dunia — atau cukup oleh armada server-mu saja.

Registry juga memberimu tiga hal yang luar biasa pentingnya dalam praktik: satu salinan resmi yang disepakati semua orang, versioning lewat tag dan digest supaya kamu selalu tahu apa yang terdeploy, dan kontrol akses supaya kode privatmu tetap privat sementara base image bersama tetap terbuka. Cabut semua itu dan kamu kembali ke menyalin berkas secara manual sambil berharap tiap mesin akhirnya dapat barang yang sama — persis kekacauan yang justru ingin dihindari ketika container diciptakan.

Kalau kamu mengikuti dari awal, ini menyatu rapi dengan apa yang sudah kamu tahu: image adalah paketnya, dan registry adalah tempat paket itu tinggal dan berpindah. Berdua, mereka adalah jawaban utuh soal bagaimana sebuah container yang kamu bangun di satu tempat bisa berakhir berjalan, tanpa berubah, di semua tempat lain.

Penutup

Ini gambaran utuhnya dalam satu tempat:

  • Container registry adalah server yang menyimpan dan menyebarkan container image — sebuah gudang tempat kamu mem-push image ke dalamnya dan mem-pull image keluar darinya.
  • Dua operasi intinya adalah push (mengunggah image untuk dibagikan) dan pull (mengunduh image untuk dijalankan). Registry duduk di antara mesin yang membangun dan mesin yang menjalankan.
  • Image ditata sebagai registry / repository : tag. Sebuah tag menunjuk ke sebuah versi; mem-pull lewat digest menjamin byte yang sama persis setiap kali.
  • latest cuma tag biasa, bukan penunjuk yang dijamin terbaru — patok versi yang nyata untuk apa pun yang kamu deploy.
  • Registry publik (siapa pun bisa pull) menampung base image bersama; registry privat (wajib login) menampung image aplikasimu sendiri.
  • Registry menyimpan image dalam layer yang dipakai bersama dan dialamati berdasarkan kontennya, jadi layer yang tidak berubah disimpan dan ditransfer cuma sekali — itulah yang membuat push dan pull cepat.
  • Dalam pipeline deployment, registry adalah satu sumber kebenaran antara membangun dan menjalankan, dan kontrol aksesnya adalah batas keamanan yang nyata.

Berikutnya, ada baiknya kita lihat apa yang menjaga container tetap terpisah aman satu sama lain dan dari host yang mereka pakai bersama — yaitu ide soal isolasi container, dan kenapa menjalankan banyak container di satu mesin tidak berubah jadi satu kekusutan besar yang ruwet.

Tag:containersregistryimagedevopspemula
728 × 90Slot Iklan TersediaPasang iklan Anda di sini

Artikel Terkait

Lihat Semua Artikel

Artikel yang Mungkin Kamu Suka

SSL dan enkripsi at rest — data terlindungi saat berjalan dan saat tersimpan di disk
Server / Keamanan Server

SSL dan Enkripsi at Rest: Melindungi Data Saat Berjalan dan Saat Tersimpan

Enkripsi melindungi data di dua tempat: saat data lewat di jaringan (in transit) dan saat data nganggur di disk (at rest). Pahami bedanya, kenapa kamu butuh keduanya, bagaimana TLS, enkripsi disk, dan pengelolaan kunci sebenarnya saling melengkapi, plus kesalahan praktis yang sering bikin sia-sia.

9 Nov 202612 menit baca
Mengamankan port dan service — menutup pintu di server yang tidak kamu pakai
Server / Keamanan Server

Mengamankan Port dan Service: Menutup Pintu yang Tidak Kamu Pakai

Setiap port yang terbuka di server adalah satu pintu yang bisa dicoba orang lain. Pahami port dan service itu sebenarnya apa, kenapa service yang terekspos jadi risiko terbesarmu, dan kebiasaan sederhana menutup semua yang tidak kamu butuhkan — dijelaskan dari nol.

8 Nov 202610 menit baca
Prinsip least privilege — memberi hanya akses minimum yang dibutuhkan tiap user dan proses
Server / Keamanan Server

Prinsip Least Privilege: Beri Setiap Hal Hanya Akses yang Benar-Benar Dibutuhkan

Least privilege adalah aturan diam-diam di balik hampir semua setup keamanan yang solid: setiap user, proses, dan kunci hanya dapat akses minimum untuk menjalankan tugasnya, tidak lebih.

7 Nov 202612 menit baca
Fail2ban dan dasar intrusi — mengawasi log dan mem-banned otomatis pelaku yang menggedor berulang kali
Server / Keamanan Server

Fail2ban dan Dasar Intrusi: Mem-banned Otomatis Bot yang Terus Menggedor Server-mu

Penyerang tidak berhenti setelah sekali salah tebak — mereka terus menggedor, ribuan kali sehari. Pahami seperti apa sebenarnya percobaan intrusi, apa yang dikerjakan fail2ban, bagaimana ia mengawasi log dan mem-banned pelaku otomatis, dan cara menyetelnya dengan masuk akal tanpa mengunci dirimu.

6 Nov 202612 menit baca
Menjaga software tetap update — menutup lubang keamanan yang sudah diketahui sebelum penyerang memakainya
Server / Keamanan Server

Menjaga Software Tetap Update: Kebiasaan Membosankan yang Mencegah Sebagian Besar Pembobolan Server

Kebanyakan server tidak dibobol lewat serangan baru yang canggih — tapi lewat lubang lama yang sudah diketahui, yang sebenarnya cukup ditutup dengan update. Pelajari kenapa update itu penting, apa saja yang harus di-update, cara melakukannya dengan aman tanpa merusak apa pun, dan cara.

5 Nov 20269 menit baca
Konfigurasi firewall — aturan default-deny yang hanya membuka port yang kamu butuhkan
Server / Keamanan Server

Konfigurasi Firewall: Menyusun Aturan Default-Deny Tanpa Mengunci Diri Sendiri

Tahu apa itu firewall dan benar-benar mengonfigurasinya dengan rapi adalah dua keterampilan berbeda. Pelajari cara menyusun aturan default-deny, mengurutkan aturan dengan benar, membuka akses sendiri lebih dulu, menangani IPv6 dan security group cloud, lalu mengujinya sebelum dipakai — panduan.

4 Nov 202614 menit baca