Kembali ke Beranda
DevOps

Docker: Sejarah, Evolusi, dan Dasar-Dasar Container Modern

Docker adalah platform containerization yang merevolusi cara aplikasi dibangun, dikemas, dan dijalankan. Berawal dari proyek internal dotCloud pada tahun 2013, Docker berhasil menyederhanakan teknologi container Linux menjadi solusi yang mudah digunakan oleh developer. Artikel ini membahas sejarah Docker, evolusinya hingga menjadi standar industri, konsep dasar container, image, volume, network, serta berbagai perintah Docker yang paling sering digunakan dalam pengembangan aplikasi 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:

  • Google
  • 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.

dockercontainerdevopskubernetescloud nativedocker composedockerfilevirtualizationlinux containercontainerdpodmandeploymentci cdmicroservicesinfrastructureplatform engineeringsoftware developmentcloud computingteknologinirantara blog
Nirantara Logo

Published by Nirantara

Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.

Learn more about Nirantara