Apa itu Docker?

Pengertian Docker dan container, analogi kontainer kargo, serta letak container dalam arsitektur Docker.

Daftar isi

Topik ini menjelaskan pengertian Docker dan container, yaitu paket perangkat lunak yang membungkus aplikasi beserta seluruh dependensinya untuk dijalankan secara terisolasi. Pembahasan bergerak dari definisi Docker sebagai platform, analogi kontainer kargo, hingga letak container di dalam arsitektur Docker yang tersusun atas tiga komponen utama. Setelah topik ini dibaca, fungsi setiap komponen arsitektur dapat dijelaskan dan perintah pengujian pertama dikenali fungsinya.

Docker sebagai platform container#

Docker adalah platform untuk membangun, menjalankan, dan membagikan aplikasi dalam bentuk container. Sebuah container memuat satu aplikasi beserta seluruh dependensinya, mulai dari runtime sebagai lingkungan eksekusi program, pustaka, hingga berkas konfigurasi. Karena seluruh dependensi itu terbungkus, aplikasi berjalan dengan cara yang sama di mesin mana pun container dijalankan. Bungkusan semacam ini menjawab persoalan klasik pengembangan perangkat lunak, yaitu aplikasi yang berjalan baik di mesin pengembang tetapi gagal di server karena perbedaan versi pustaka. Alih-alih mencocokkan lingkungan secara manual, pengemasan menyatukan aplikasi dan lingkungannya sejak awal.

Kunci mekanisme tersebut adalah image, yaitu cetakan siap jalankan yang memuat sistem berkas aplikasi beserta dependensinya, sedangkan container adalah instans yang berjalan di atas image tersebut. Satu image dapat dipakai untuk membuat banyak container, dan setiap container berjalan terpisah dari yang lain. Prinsip ini sering diringkas dalam satu kalimat, yaitu image sebagai cetakan dan container sebagai hasil cetakannya. Tiga kemampuan Docker pun tersusun di atas pasangan konsep ini, yaitu membangun image dari deskripsi teks, menjalankan container dari image, dan membagikan image kepada mesin lain.

Analogi kontainer kargo#

Sebelum kontainer kargo berukuran standar diperkenalkan, pelabuhan menangani muatan secara satuan, mulai dari karung, tong, hingga peti, dan setiap bentuk memerlukan cara pengangkutan yang berbeda. Kontainer standar mengubah situasi tersebut dengan menetapkan satu ukuran yang sama untuk semua muatan, sehingga kapal, truk, derek, dan pelabuhan hanya perlu menangani satu bentuk bawaan tanpa peduli isinya. Bongkar muat menjadi lebih cepat dan murah karena setiap pihak dalam rantai distribusi berbicara pada format yang sama.

Image mengambil peran yang sama untuk perangkat lunak. Aplikasi beserta dependensinya dikemas ke dalam satu format bawaan yang seragam, sehingga laptop pengembang, server pengujian, dan server produksi cukup menangani format tersebut tanpa menyesuaikan isinya satu per satu. Image yang sama dijalankan di mesin mana pun dengan perilaku yang seragam karena lingkungannya sudah terbungkus. Perbedaannya dengan kontainer kargo terletak pada sifat salinannya, yaitu image dapat diduplikasi dan dikirim ke mesin lain dalam hitungan detik, sedangkan kontainer kargo fisik harus diangkut utuh satu per satu.

Letak container dalam arsitektur Docker#

Arsitektur Docker tersusun atas tiga komponen yang bekerja berlapis. Komponen pertama adalah Docker CLI (command line interface), yaitu alat baris perintah tempat perintah seperti docker run diketik. Perintah tersebut tidak dieksekusi oleh CLI sendirian, melainkan diteruskan kepada komponen kedua bernama daemon, yaitu proses layanan dockerd yang berjalan terus-menerus dan mengelola image serta container. Mesin tempat daemon itu berjalan disebut host, sedangkan komponen ketiga bernama registry adalah layanan penyimpanan dan distribusi image, contohnya Docker Hub. Apabila sebuah image belum ada di host, daemon menariknya dari registry secara otomatis.

Container berjalan di atas kernel host dan dikelola langsung oleh daemon, bukan di atas sistem operasi tamu tersendiri. Struktur inilah yang menjadi dasar seluruh perintah Docker, sehingga memahami letaknya mempermudah pembacaan pesan error pada saat diagnosis. Diagram berikut merangkum alurnya, mulai dari perintah yang diketik hingga image yang ditarik dari registry.

Docker CLIalat baris perintahDaemon DockerdockerdRegistryDocker Hubperintahmenarik imageresponslayer image
Alur perintah dari Docker CLI menuju daemon dan registry

Alur pada diagram berlangsung dalam dua arah. Menuju kanan, CLI mengirimkan perintah kepada daemon, dan daemon menarik image dari registry apabila image yang diminta belum tersedia di host. Menuju kiri, daemon mengembalikan respons berupa status eksekusi, pesan error, atau keluaran program. CLI tidak pernah berbicara langsung dengan registry, sehingga seluruh pekerjaan bergantung pada daemon yang hidup di host.

Perintah pengujian pertama#

Dokumentasi resmi Docker mengakhiri halaman pengenalnya dengan satu perintah yang menguji ketiga komponen arsitektur sekaligus.

bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
docker run hello-world

Perintah tersebut memerintahkan daemon melakukan tiga langkah berurutan. Pertama, daemon memeriksa apakah image bernama hello-world sudah ada di host. Kedua, karena image itu belum ada pada mesin yang baru saja memasang Docker, daemon menarik image hello-world dari Docker Hub. Ketiga, daemon membuat satu container dari image tersebut, menjalankannya, dan container itu mencetak pesan konfirmasi ke layar sebelum berakhir.

Keluarannya berupa rangkaian pesan berurutan yang menjelaskan ketiga langkah tadi, disusul uraian singkat tentang apa yang baru saja dilakukan. Kehadiran rangkaian pesan tersebut menandakan seluruh rantai, dari CLI hingga registry, berfungsi dengan baik.

Ringkasan#

  • Docker adalah platform untuk membangun, menjalankan, dan membagikan container, yaitu paket terisolasi yang membungkus aplikasi beserta seluruh dependensinya.
  • Image berperan sebagai cetakan siap jalankan, sedangkan container adalah instans yang berjalan di atasnya, dan satu image dapat membuat banyak container.
  • Arsitektur Docker terdiri atas Docker CLI sebagai penerima perintah, daemon yang mengelola image dan container di atas kernel host, serta registry yang menyimpan dan mendistribusikan image.
  • Analogi kontainer kargo menegaskan manfaat intinya, yaitu satu format bawaan yang seragam sehingga aplikasi berpindah antarmesin tanpa penyesuaian ulang.

Referensi#