"Di laptop saya jalan, kok di server tidak?" Kalimat ini akrab bagi siapa pun yang pernah memindahkan aplikasi dari satu lingkungan ke lingkungan lain. Penyebabnya biasanya sepele tetapi menyebalkan: versi bahasa pemrograman berbeda, pustaka yang kurang, atau konfigurasi yang tidak sama. Kontainer dibuat untuk mengatasi masalah ini, dan Docker adalah alat yang membuatnya populer.
Apa Itu Kontainer
Kontainer adalah paket yang membungkus sebuah aplikasi bersama semua yang dibutuhkannya untuk berjalan: kode, runtime, pustaka, dan pengaturan. Karena semuanya terkemas, aplikasi berperilaku sama di laptop pengembang, server pengujian, maupun server produksi.
Kontainer berjalan di atas sistem operasi induk dan berbagi kernel-nya, tetapi setiap kontainer terisolasi: punya sistem berkas, proses, dan jaringan sendiri dari sudut pandang aplikasinya.
Docker Itu Apa
Docker adalah platform untuk membangun, mengirim, dan menjalankan kontainer. Ada beberapa istilah yang perlu dikenal:
- Image. Cetak biru yang bersifat baca-saja berisi aplikasi dan dependensinya. Dari satu image bisa dibuat banyak kontainer.
- Kontainer. Hasil menjalankan sebuah image. Ia adalah instans yang hidup dan bisa dihentikan atau dihapus.
- Dockerfile. Berkas teks berisi langkah-langkah membuat image: mulai dari image dasar, menyalin kode, memasang dependensi, hingga menentukan perintah awal.
- Registry. Tempat menyimpan dan membagikan image, baik publik maupun privat.
- Volume. Penyimpanan di luar kontainer agar data tetap ada walau kontainer dihapus.
Cara Kerjanya Secara Singkat
Alurnya biasanya begini. Anda menulis Dockerfile, membangun image dari berkas itu, lalu menjalankan image tersebut sebagai kontainer. Image bisa diunggah ke registry sehingga rekan kerja atau server lain dapat mengambil dan menjalankannya dengan hasil yang sama. Ketika aplikasi diperbarui, Anda membangun image versi baru dan mengganti kontainer lama.
Image tersusun dari lapisan. Jika hanya satu lapisan yang berubah, misalnya kode aplikasi, lapisan lain bisa dipakai ulang dari cache sehingga pembangunan lebih cepat.
Bedanya dengan Mesin Virtual
Mesin virtual (VM) menjalankan sistem operasi tamu lengkap di atas hypervisor. Setiap VM membawa kernel dan sistem operasinya sendiri. Kontainer, sebaliknya, berbagi kernel host.
| Aspek | Kontainer | Mesin virtual |
|---|---|---|
| Ukuran | Biasanya jauh lebih kecil | Lebih besar karena membawa sistem operasi penuh |
| Waktu mulai | Cepat | Lebih lambat |
| Isolasi | Pada tingkat proses | Lebih kuat, hingga tingkat perangkat keras virtual |
| Kebutuhan sumber daya | Lebih hemat | Lebih besar |
Isolasi yang lebih tipis berarti kontainer tidak otomatis lebih aman. Untuk beban kerja yang menuntut pemisahan sangat ketat, VM tetap pilihan wajar, dan keduanya sering dipakai bersama.
Manfaat Memakai Kontainer
- Konsistensi lingkungan dari pengembangan sampai produksi.
- Onboarding cepat. Anggota baru cukup menjalankan beberapa perintah untuk memperoleh lingkungan kerja yang sama.
- Pemakaian sumber daya efisien, sehingga lebih banyak aplikasi bisa dijalankan di satu mesin.
- Skalabilitas. Menambah jumlah kontainer lebih mudah daripada menyiapkan server baru.
- Pemisahan layanan. Basis data, aplikasi, dan cache dapat berjalan di kontainer terpisah.
Docker Compose dan Orkestrasi
Aplikasi nyata biasanya terdiri dari beberapa layanan. Docker Compose memungkinkan Anda mendefinisikan layanan-layanan itu dalam satu berkas dan menjalankannya sekaligus, yang sangat berguna untuk pengembangan lokal. Pada skala besar, alat orkestrasi seperti Kubernetes mengatur penempatan, pemulihan, dan penskalaan banyak kontainer di banyak mesin. Untuk proyek kecil, Compose sudah lebih dari cukup.
Kesalahan yang Sering Terjadi
Menyimpan data penting di dalam kontainer tanpa volume, sehingga hilang saat kontainer dibuat ulang. Memakai image dasar yang terlalu besar tanpa perlu. Menyertakan kata sandi atau kunci rahasia di dalam image. Menjalankan proses sebagai pengguna root padahal tidak diperlukan. Tidak memperbarui image dasar, sehingga celah keamanan lama terus terbawa.
Penutup
Kontainer tidak menggantikan semua cara menjalankan aplikasi, tetapi memberi cara yang rapi untuk membuat lingkungan yang dapat diulang. Untuk mencobanya, ambil satu aplikasi kecil, tulis Dockerfile sederhana, lalu jalankan di mesin lain. Bila hasilnya sama, Anda sudah merasakan manfaat intinya.