Selamat datang di Course Docker! Sebelum Docker ada, mengemas satu aplikasi agar bisa dijalankan di komputer lain adalah pekerjaan yang melelahkan: kita mencatat daftar dependensi, menulis dokumentasi instalasi langkah demi langkah, lalu berharap tidak ada satu pun langkah yang terlewat di komputer tujuan. Cara lama semacam ini menyulitkan hampir semua pihak — developer yang menyerahkan proyek ke rekan, tim operasional yang memindahkan aplikasi dari laptop ke server, sampai anggota baru yang butuh berhari-hari hanya untuk menyiapkan lingkungan kerja. Docker lahir persis untuk menjawab kelelahan tersebut. Pada Chapter ini kita akan mengenal Docker mulai dari definisi, sejarah singkat, ciri utama, sampai perintah pertama kita di terminal.
Definisi Docker #
Docker adalah platform containerization open source yang memungkinkan kita mengemas aplikasi beserta seluruh kebutuhannya — kode, library, runtime, sampai variabel lingkungan — menjadi satu unit portabel yang disebut container. Unit tersebut kemudian dijalankan secara konsisten di mana saja: di laptop saat pengembangan, di server uji, maupun di server produksi. Perangkat Docker sendiri ditulis dalam bahasa Go dan bekerja sebagai daemon di atas kernel Linux, sehingga Docker memanfaatkan fitur yang sudah tersedia di kernel alih-alih menciptakan lapisan virtualisasi baru.
Dalam kosakata Docker ada tiga kata kunci yang akan terus muncul sepanjang Course ini. Image adalah paket read-only berisi aplikasi dan seluruh dependensinya; container adalah proses yang sedang berjalan dari sebuah image; registry adalah layanan tempat image disimpan dan dibagikan — contoh paling terkenal adalah Docker Hub. Ketiganya kita bedah tuntas pada Chapter Image, Container, dan Registry; untuk sekarang, cukup bayangkan image sebagai paket jadi dan container sebagai paket yang sedang dinyalakan.
Sejarah Singkat Docker #
Docker diperkenalkan kepada publik pada tahun 2013 oleh Solomon Hykes, insinyur pendiri dotCloud, sebuah perusahaan penyedia layanan platform-as-a-service. Sebagai penyedia PaaS, dotCloud lama bergumul dengan masalah mengemas dan menjalankan aplikasi pelanggan secara aman di server yang sama, dan dari pergulatan itu lahir alat internal yang akhirnya dibuka ke publik sebagai proyek open source bernama Docker. Kesuksesan proyek ini bahkan membuat dotCloud mengganti nama perusahaannya menjadi Docker Inc.
Dua keputusan teknis membuat Docker tumbuh begitu cepat. Pertama, Docker dibangun dengan bahasa Go dan menumpang namespace serta cgroups — dua fitur kernel Linux yang sudah tersedia sejak sekitar 2008 — alih-alih menciptakan mesin virtual sendiri, sehingga container terasa ringan dan cepat. Kedua, komponen-komponen inti seperti format image dan runtime container distandarkan melalui Open Container Initiative, dan runtime containerd disumbangkan ke Cloud Native Computing Foundation sehingga menjadi fondasi bersama ekosistem yang lebih luas — termasuk Kubernetes. Berkat jalur standar semacam itu, Docker berkembang dari alat internal satu perusahaan menjadi standar industri pengemasan perangkat lunak.
Container adalah Proses Linux Terisolasi #
Ada satu penegasan yang perlu kita tanam sejak awal: container bukan mesin virtual kecil. Container adalah proses Linux biasa — sama seperti proses browser atau editor yang sedang berjalan di laptop kita — hanya saja kernel menjalankan proses tersebut dalam kondisi terisolasi lewat dua mekanisme. Mekanisme namespace memberi proses itu tampilan tersendiri atas daftar proses, kartu jaringan, dan sistem berkas; sementara cgroups membatasi berapa banyak CPU dan memori yang boleh dipakai proses tersebut.
Karena container pada akhirnya hanyalah proses, tidak ada sistem operasi tamu yang ikut dinyalakan. Container dapat berjalan dalam hitungan detik dan menghabiskan resource yang jauh lebih kecil daripada mesin virtual. Mekanisme namespace dan cgroups ini akan kita bedah lebih dalam pada Chapter Arsitektur Docker.
Ciri Utama Docker #
| Ciri | Artinya bagi kita |
|---|---|
| Konsisten lintas lingkungan | Aplikasi berjalan identik di laptop, server uji, dan produksi |
| Ringan dan cepat | Container berbagi kernel host sehingga start dalam hitungan detik |
| Portabel | Image dapat dipindahkan ke mesin mana pun melalui registry |
| Terisolasi | Namespace dan cgroups memisahkan proses, jaringan, dan resource |
| Ekosistem image besar | Docker Hub menyediakan koleksi image publik siap pakai |
| Ramah otomatisasi | Semua operasi dapat dijalankan dari CLI sehingga cocok untuk CI/CD |
Enam ciri di atas saling menguatkan satu sama lain. Isolasi yang murah membuat menjalankan banyak aplikasi di satu host menjadi aman; image yang portabel membuat hasil kerja satu orang mudah dibagikan ke seluruh tim; dan semuanya dapat diotomatisasi lewat CLI sehingga cocok dengan alur CI/CD modern. Kombinasi inilah yang membuat Docker diadopsi luas, bukan sekadar satu fitur unggulan sendirian.
Menjalankan hello-world #
Perkenalan paling jujur dengan Docker adalah menjalankannya langsung. Perintah berikut meminta Docker membuat container dari image hello-world, image resmi mungil yang memang disediakan untuk memverifikasi instalasi. Kita asumsikan Docker sudah terpasang dan daemon-nya menyala; jika belum, Section Instalasi dan Konfigurasi akan memandu sampai tuntas:
$ docker run hello-worldOutput yang Dihasilkan:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/Mari kita telaah perjalanan perintah docker run hello-world dari tombol Enter sampai pesan muncul di layar:
- Docker CLI menerima perintah — program
dockeryang kita panggil di terminal hanyalah klien ringan; klien ini meneruskan permintaan kita ke daemon Docker melalui REST API. - Daemon menarik image dari Docker Hub — daemon tidak menemukan image hello-world di penyimpanan lokal, jadi daemon mengunduhnya dari Docker Hub, registry default milik Docker; unduhan ini hanya terjadi sekali karena image selanjutnya diambil dari simpanan lokal.
- Daemon menjalankan container — dari image yang baru diunduh, daemon menciptakan container dan menjalankan program kecil di dalamnya; program itulah yang mencetak pesan
Hello from Docker!. - Output dialirkan kembali dan container selesai — daemon mengirim keluaran program ke CLI untuk ditampilkan di terminal; program lalu selesai, container berhenti, dan terminal kembali siap dipakai.
Sekilas Docker dan Virtual Machine #
Banyak orang menyebut container sebagai mesin virtual ringan, dan persamaan itu bisa menyesatkan. Efeknya memang mirip — keduanya mengisolasi aplikasi — tetapi mekanismenya berbeda total: mesin virtual membawa sistem operasi tamu utuh lewat hypervisor, sedangkan container berbagi kernel host seperti yang sudah kita bahas. Bukti paling nyata ada di ukurannya: image hello-world yang baru kita unduh hanya berukuran 13.3kB, jauh dari kata mesin — tidak ada sistem operasi mana pun yang muat sekecil itu. Perbandingan mendalam antara container dan virtual machine kita bahas khusus pada Chapter Container dan Virtual Machine.
Dengan definisi, sejarah, ciri utama, dan perintah pertama sudah di tangan, kita siap menjawab pertanyaan yang jauh lebih penting: masalah apa sesungguhnya yang diselesaikan Docker sampai industri menjadikannya standar? Chapter berikutnya, Masalah yang Diselesaikan Docker, membedah empat masalah nyata tersebut satu per satu lewat kisah dua developer bernama Budi dan Siti.
Referensi #
- Docker Overview — pengantar resmi: apa itu Docker, untuk apa dipakai, dan bagaimana arsitekturnya.
- Container Concepts — penjelasan konsep image, container, dan registry dari dokumentasi resmi.
- Situs Resmi Docker — halaman produk dan perusahaan di balik Docker.