Docker: Sejarah, Evolusi, dan Dasar-Dasar Container Modern
Dalam dunia pengembangan perangkat lunak modern, Docker telah menjadi salah satu teknologi yang paling berpengaruh dalam satu dekade terakhir. Docker mengubah cara aplikasi dibangun, dikemas, didistribusikan, dan dijalankan. Sebelum Docker hadir, proses deployment sering kali menjadi tantangan karena perbedaan lingkungan antara komputer developer, server testing, dan server produksi.
Kalimat yang sangat populer pada masa itu adalah:
"Di laptop saya jalan kok."
Masalah tersebut sering muncul karena perbedaan versi sistem operasi, library, runtime, atau konfigurasi server. Docker hadir untuk mengatasi masalah tersebut melalui konsep container yang ringan, cepat, dan konsisten.
Sejarah Sebelum Docker
Era Deployment Tradisional
Sebelum container menjadi populer, aplikasi biasanya diinstal langsung pada server.
Contoh stack aplikasi:
- Sistem Operasi Linux
- Apache atau Nginx
- PHP atau Java
- Database MySQL atau PostgreSQL
- Berbagai library pendukung
Pendekatan ini memiliki banyak kelemahan:
- Sulit melakukan migrasi server
- Konflik versi library
- Konfigurasi tidak terdokumentasi
- Sulit melakukan rollback
- Setup server membutuhkan waktu lama
Era Virtual Machine (VM)
Untuk mengatasi masalah tersebut, industri mulai menggunakan virtualisasi.
Beberapa platform virtualisasi yang populer:
- VMware ESXi
- Microsoft Hyper-V
- Xen Server
- KVM
Arsitektur Virtual Machine:
Physical Server
│
├── Hypervisor
│
├── VM 1
│ ├── Guest OS
│ └── Application
│
├── VM 2
│ ├── Guest OS
│ └── Application
│
└── VM 3
├── Guest OS
└── Application
Virtual Machine memberikan isolasi yang baik, namun memiliki beberapa kekurangan:
- Membutuhkan Guest Operating System untuk setiap VM
- Mengonsumsi RAM besar
- Startup lambat
- Membutuhkan storage yang besar
- Resource server cepat habis
Lahirnya Docker
Docker pertama kali diperkenalkan pada tahun 2013 oleh Solomon Hykes.
Awalnya Docker merupakan proyek internal dari perusahaan cloud bernama dotCloud.
Tujuan awal Docker adalah:
- Menyederhanakan deployment aplikasi
- Membuat aplikasi mudah dipindahkan
- Menghilangkan masalah perbedaan lingkungan
Docker memanfaatkan teknologi Linux yang sebenarnya sudah ada sejak lama, yaitu:
- Linux Namespaces
- Control Groups (cgroups)
- Union Filesystem
Docker berhasil membungkus teknologi tersebut menjadi platform yang mudah digunakan oleh developer.
Docker Versi Awal
Pada awal kemunculannya, Docker menggunakan teknologi:
LXC (Linux Containers)
LXC memungkinkan proses berjalan secara terisolasi tanpa perlu menjalankan Guest OS.
Arsitekturnya menjadi:
Hardware
│
└── Linux Kernel
│
├── Container A
├── Container B
├── Container C
└── Container D
Keuntungan:
- Sangat ringan
- Startup sangat cepat
- Konsumsi RAM kecil
- Kepadatan container tinggi
Mengapa Docker Menjadi Populer?
Docker memperkenalkan konsep yang sangat sederhana:
Build Once, Run Anywhere
Developer cukup membuat image sekali:
docker build -t aplikasi .
Image tersebut dapat dijalankan pada:
- Laptop developer
- Server testing
- Server staging
- Production server
- Cloud environment
tanpa perubahan konfigurasi yang signifikan.
Konsep ini menjadi revolusioner karena menghilangkan banyak masalah deployment.
Docker Hub
Salah satu faktor sukses Docker adalah hadirnya Docker Hub.
Docker Hub adalah repository publik untuk image container.
Developer dapat langsung menggunakan image yang sudah tersedia.
Contoh:
docker pull nginx
docker pull mysql
docker pull redis
docker pull postgres
docker pull ubuntu
Dengan Docker Hub, developer tidak perlu lagi melakukan instalasi manual yang panjang.
Docker dan Standarisasi Industri
Pada tahun 2015-2017, Docker berkembang sangat cepat.
Perusahaan besar mulai mendukung Docker:
- Microsoft
- IBM
- Amazon
- Red Hat
Container kemudian menjadi standar baru dalam deployment aplikasi modern.
Lahirnya Open Container Initiative (OCI)
Seiring pertumbuhan Docker, industri menginginkan standar yang lebih terbuka.
Maka dibentuklah:
Open Container Initiative (OCI)
Tujuannya:
- Menstandarkan format image
- Menstandarkan runtime container
- Menghindari vendor lock-in
Hasilnya:
Container Docker dapat dijalankan oleh runtime lain yang kompatibel dengan OCI.
Evolusi Runtime Container
Awalnya Docker menggunakan Docker Engine sebagai runtime utama.
Kemudian muncul berbagai runtime lain:
containerd
Saat ini menjadi runtime default pada Kubernetes modern.
CRI-O
Runtime khusus untuk Kubernetes.
Podman
Alternatif Docker tanpa daemon.
Keuntungan Podman:
- Lebih aman
- Rootless container
- Kompatibel dengan Docker CLI
Docker dan Kubernetes
Kesuksesan Docker melahirkan kebutuhan untuk mengelola ribuan container sekaligus.
Google kemudian memperkenalkan Kubernetes.
Hubungan keduanya:
Docker
↓
Container
↓
Kubernetes
↓
Cluster
Saat ini Kubernetes menjadi standar de-facto untuk container orchestration.
Konsep Dasar Docker
Image
Image adalah template atau blueprint aplikasi.
Contoh:
docker pull nginx
Image belum berjalan.
Container
Container adalah instance yang berjalan dari sebuah image.
Contoh:
docker run nginx
Setelah dijalankan, image berubah menjadi container aktif.
Registry
Registry adalah tempat penyimpanan image.
Contoh registry:
- Docker Hub
- Harbor
- Nexus
- GitLab Container Registry
- Amazon ECR
Volume
Volume digunakan untuk menyimpan data permanen.
Tanpa volume:
Container Dihapus
↓
Data Hilang
Dengan volume:
Container Dihapus
↓
Data Tetap Ada
Network
Docker memiliki sistem jaringan internal.
Container dapat saling berkomunikasi menggunakan nama container tanpa perlu konfigurasi jaringan yang rumit.
Contoh:
Web Container
↓
Database Container
Perintah Docker yang Paling Sering Digunakan
Melihat Versi Docker
docker version
Informasi Docker
docker info
Mengunduh Image
docker pull nginx
Menampilkan Semua Image
docker images
Menjalankan Container
docker run nginx
Menjalankan di background:
docker run -d nginx
Menjalankan dengan Port Mapping
docker run -d -p 8080:80 nginx
Artinya:
Host Port 8080
↓
Container Port 80
Akses:
http://localhost:8080
Melihat Container Aktif
docker ps
Melihat Semua Container
docker ps -a
Menghentikan Container
docker stop container_id
Menjalankan Kembali Container
docker start container_id
Restart Container
docker restart container_id
Menghapus Container
docker rm container_id
Menghapus Image
docker rmi image_id
Melihat Log Container
docker logs container_id
Realtime:
docker logs -f container_id
Masuk ke Dalam Container
docker exec -it container_id bash
Jika image minimal:
docker exec -it container_id sh
Dockerfile
Dockerfile adalah resep untuk membangun image.
Contoh sederhana:
FROM nginx:latest
COPY index.html /usr/share/nginx/html
EXPOSE 80
Build image:
docker build -t websiteku .
Jalankan:
docker run -d -p 8080:80 websiteku
Docker Compose
Ketika aplikasi memiliki banyak service, menjalankannya satu per satu akan merepotkan.
Contoh:
- Frontend
- Backend
- Database
- Redis
Docker Compose memungkinkan semuanya dijalankan menggunakan satu file konfigurasi.
Contoh:
services:
web:
image: nginx
db:
image: mysql
redis:
image: redis
Menjalankan:
docker compose up -d
Menghentikan:
docker compose down
Dampak Docker terhadap Industri
Docker mengubah cara perusahaan membangun dan menjalankan aplikasi.
Sebelum Docker
- Setup server berjam-jam
- Deployment manual
- Konflik dependency
- Sulit melakukan scaling
Setelah Docker
- Deployment hitungan menit
- Konsistensi lingkungan
- Mudah diintegrasikan dengan CI/CD
- Mudah melakukan scaling
Docker menjadi fondasi bagi banyak teknologi modern:
- Kubernetes
- OpenShift
- GitLab CI/CD
- Jenkins Pipeline
- ArgoCD
- Platform Engineering
Apakah Docker Masih Relevan Saat Ini?
Jawabannya adalah sangat relevan.
Walaupun Kubernetes saat ini banyak menggunakan containerd sebagai runtime utama, Docker tetap menjadi alat yang paling populer untuk:
- Development lokal
- Build image
- Testing aplikasi
- CI/CD Pipeline
- Pembelajaran container
Hampir semua developer modern yang bekerja dengan cloud, DevOps, microservices, maupun platform engineering akan menggunakan Docker dalam aktivitas sehari-hari.
Penutup
Docker bukanlah teknologi container pertama di dunia. Namun Docker adalah teknologi yang berhasil membawa container ke arus utama industri perangkat lunak. Dengan menyederhanakan proses packaging dan deployment aplikasi, Docker menghilangkan banyak masalah klasik yang selama bertahun-tahun menjadi hambatan dalam pengembangan sistem.
Saat ini Docker telah menjadi salah satu fondasi utama dalam ekosistem cloud-native modern. Memahami Docker bukan lagi sekadar nilai tambah, tetapi telah menjadi keterampilan dasar yang penting bagi developer, system administrator, DevOps engineer, hingga platform engineer dalam membangun dan mengelola aplikasi modern secara efisien.
Published by Nirantara
Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.