Skip to content

Image, container, dan registry

Tiga konsep ini akan muncul terus sampai akhir course. Pahami hubungan di antara ketiganya sebelum menjalankan command Docker.

Image dan container

Image adalah paket yang berisi semua kebutuhan untuk membuat container, seperti file aplikasi, runtime, library, dan perintah start.

Container adalah instance yang sedang berjalan dari sebuah image. Satu image bisa dipakai untuk membuat banyak container.

Analogi sederhananya:

  • Image seperti resep masakan.
  • Container seperti masakan yang dibuat dari resep tersebut.

Satu resep bisa dipakai berkali-kali. Begitu juga satu image bisa dipakai untuk membuat beberapa container.

Loading diagram...

Image tidak berjalan sendiri. Container-lah yang berjalan menggunakan image. Kalau container dihapus, image-nya tetap ada. Kalau image dihapus, kamu tidak bisa membuat container baru dari image tersebut sampai image itu tersedia lagi di mesin, misalnya setelah melakukan pull dari registry.

Registry

Registry adalah tempat untuk menyimpan dan membagikan image. Docker Engine bisa mengambil image dari registry atau mengirim image ke sana. Registry mirip repository untuk image, bukan tempat menjalankan container.

Docker Hub adalah registry publik yang biasa dipakai sebagai default. Saat kamu menjalankan docker pull nginx, Docker mengambil image Nginx dari Docker Hub.

Pada praktiknya di pekerjaan, registry bisa bersifat privat, misalnya GHCR, Amazon ECR, Google Artifact Registry, atau GitLab Container Registry. Alurnya tetap sama:

  1. Build image.
  2. Push image ke registry.
  3. Pull image dari registry di mesin yang membutuhkannya.

Nama image biasanya menggunakan format nama:tag, misalnya nginx:1.27 atau postgres:16. Tag latest hanya berarti tag default. Untuk production, gunakan tag versi yang jelas agar image yang dipakai tidak berubah tanpa sengaja.

Hubungan Docker CLI, Docker Engine, dan registry

Saat kamu mengetik perintah Docker di terminal, ada beberapa komponen yang bekerja:

Loading diagram...
  • Docker CLI adalah program yang menerima command seperti docker run dan docker images. CLI tidak menjalankan container secara langsung.
  • Docker Engine adalah service yang menjalankan container, membuat image, dan mengelola network serta volume.
  • Docker daemon adalah proses utama di dalam Docker Engine yang menunggu dan menjalankan request dari Docker CLI.
  • Registry menyimpan image. Container tidak berjalan di registry.

Contohnya, saat kamu menjalankan docker run nginx:1.27, alurnya seperti ini:

  1. Docker CLI mengirim perintah tersebut ke Docker daemon.
  2. Docker daemon memeriksa apakah image nginx:1.27 sudah ada di mesin lokal.
  3. Jika belum ada, daemon mengambil image dari registry.
  4. Daemon membuat dan menjalankan container dari image tersebut.

Karena itu, CLI bisa saja ter-install, tetapi perintah tetap gagal jika Docker Engine atau daemon belum berjalan. Error seperti Cannot connect to the Docker daemon biasanya berarti Docker Desktop atau Docker Engine perlu dijalankan terlebih dahulu.

Pada lesson berikutnya, kamu akan mengambil image dari registry dan menjalankan container menggunakan Docker CLI.