Docker untuk Pemula: Panduan Lengkap dari Nol
Pernah dengar “works on my machine”? Masalah klasik developer yang kode-nya jalan di laptop sendiri tapi error di server. Docker hadir untuk menyelesaikan masalah ini.
Apa Itu Docker?
Docker adalah platform untuk membuat, mendeploy, dan menjalankan aplikasi dalam container. Container adalah lingkungan yang ringan dan terisolasi yang berisi semua yang dibutuhkan aplikasi untuk berjalan: kode, runtime, library, dan dependencies.
Bayangkan container seperti kotak yang berisi aplikasi beserta seluruh kebutuhannya. Kotak ini bisa dipindahkan ke mana saja dan tetap berjalan dengan cara yang sama. Tidak peduli apakah di laptop kamu, server teman, atau cloud production.
Mengapa Docker Penting?
Masalah Tanpa Docker
Tanpa Docker, kamu menghadapi masalah ini:
- Dependency conflict: Project A butuh Python 3.8, Project B butuh Python 3.11
- Environment mismatch: Aplikasi jalan di laptop tapi error di server
- Setup yang rumit: Setiap developer harus install dan konfigurasi dependencies yang sama
- Deployment yang susah: Banyak langkah manual yang bisa salah
Solusi dengan Docker
Docker menyelesaikan semua masalah di atas:
- Isolasi: Setiap aplikasi punya environment sendiri
- Konsisten: Aplikasi berjalan sama di mana saja
- Reproduktif: Satu perintah untuk setup environment dari nol
- Portable: Container bisa dipindahkan ke mana saja
Konsep Dasar Docker
Image
Docker Image adalah template yang berisi aplikasi beserta semua kebutuhannya. Bayangkan seperti ISO file untuk install OS, tapi untuk aplikasi. Image bersifat immutable artinya tidak bisa diubah setelah dibuat.
Container
Container adalah instance yang berjalan dari sebuah image. Satu image bisa menghasilkan banyak container. Container bisa dimulai, dihentikan, dan dihapus. Setiap container terisolasi satu sama lain.
Dockerfile
Dockerfile adalah instruksi untuk membangun Docker image. File ini berisi langkah-langkah apa saja yang harus dilakukan untuk menyiapkan environment aplikasi.
Docker Hub
Docker Hub adalah registry untuk menyimpan dan berbagi Docker image. Mirip seperti GitHub tapi untuk Docker image. Kamu bisa menemukan image resmi untuk hampir semua software populer.
Docker Compose
Docker Compose adalah tool untuk mendefinisikan dan menjalankan multi-container Docker application. Dengan satu file YAML, kamu bisa mendefinisikan semua service yang dibutuhkan aplikasi.
Install Docker
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install docker.io docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
macOS
Download Docker Desktop dari https://www.docker.com/products/docker-desktop dan install seperti aplikasi biasa.
Windows
Download Docker Desktop dari https://www.docker.com/products/docker-desktop. Pastikan WSL 2 sudah aktif.
Verifikasi Install
docker --version
# Docker version 27.x.x
docker compose version
# Docker Compose version v2.x.x
Perintah Dasar Docker
Menjalankan Container
# Jalankan container dari image
sudo docker run hello-world
# Jalankan container interaktif Ubuntu
sudo docker run -it ubuntu bash
# Jalankan container di background
sudo docker run -d nginx
# Jalankan dengan port mapping
sudo docker run -d -p 8080:80 nginx
Penjelasan flag:
-it: interaktif dengan terminal-d: detach (jalan di background)-p 8080:80: map port 8080 di host ke port 80 di container
Mengelola Container
# Lihat container yang sedang jalan
sudo docker ps
# Lihat semua container termasuk yang berhenti
sudo docker ps -a
# Stop container
sudo docker stop <container_id>
# Hapus container
sudo docker rm <container_id>
# Lihat logs
sudo docker logs <container_id>
# Masuk ke container yang sedang jalan
sudo docker exec -it <container_id> bash
Mengelola Image
# Lihat semua image
sudo docker images
# Pull image dari Docker Hub
sudo docker pull node:20
# Hapus image
sudo docker rmi <image_id>
# Hapus semua image yang tidak dipakai
sudo docker image prune
Membuat Dockerfile
Dockerfile berisi instruksi untuk membangun image. Mari kita buat Dockerfile untuk aplikasi Node.js:
Contoh Dockerfile Node.js
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Penjelasan:
FROM node:20-alpine: Base image Node.js 20 versi ringanWORKDIR /app: Set working directoryCOPY package*.json ./: Copy file package.jsonRUN npm install: Install dependenciesCOPY . .: Copy semua file projectEXPOSE 3000: Buka port 3000CMD ["node", "index.js"]: Perintah untuk menjalankan aplikasi
Build Image
sudo docker build -t my-node-app .
Jalankan Container
sudo docker run -d -p 3000:3000 my-node-app
Sekarang buka http://localhost:3000 dan aplikasi kamu sudah jalan di dalam Docker container.
Contoh Dockerfile untuk Static Website
FROM nginx:alpine
COPY . /usr/share/nginx/html
EXPOSE 80
Build dan jalankan:
sudo docker build -t my-website .
sudo docker run -d -p 8080:80 my-website
Buka http://localhost:8080 untuk melihat website kamu.
Docker Compose
Docker Compose memungkinkan kamu mendefinisikan multi-container application dalam satu file. Sangat berguna untuk aplikasi yang butuh database, cache, dan service lainnya.
Contoh docker-compose.yml
version: "3.8"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
- redis
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
- REDIS_URL=redis://redis:6379
db:
image: postgres:16
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:alpine
volumes:
pgdata:
Perintah Docker Compose
# Jalankan semua service
sudo docker compose up -d
# Lihat status service
sudo docker compose ps
# Lihat logs
sudo docker compose logs -f
# Stop semua service
sudo docker compose down
# Rebuild dan jalankan
sudo docker compose up -d --build
Dengan satu perintah docker compose up -d, kamu sudah menjalankan aplikasi dengan database PostgreSQL dan Redis. Tidak perlu install apapun di laptop kamu.
Multi-Stage Build
Multi-stage build memungkinkan kamu membuat image yang lebih kecil dengan memisahkan tahap build dan runtime:
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
Dengan multi-stage build, image final hanya berisi hasil build dan nginx. Tidak ada node_modules atau source code yang tidak diperlukan. Ukuran image bisa berkurang drastis dari ratusan MB menjadi puluhan MB.
Best Practices
1. Gunakan .dockerignore
Buat file .dockerignore untuk menghindari copy file yang tidak diperlukan:
node_modules
.git
.env
*.md
dist
2. Gunakan Alpine Image
Image berbasis Alpine Linux lebih kecil dari image standar. Contoh node:20-alpine versus node:20 bisa beda ratusan MB.
3. Jangan Jalankan sebagai Root
Tambahkan user non-root di Dockerfile:
FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
4. Gunakan Specific Tag
Hindari menggunakan tag latest. Gunakan versi spesifik:
FROM node:20.11.1-alpine
# Bukan FROM node:latest
5. Minimize Layer
Gabungkan perintah RUN untuk mengurangi jumlah layer:
RUN apt-get update && \
apt-get install -y curl git && \
rm -rf /var/lib/apt/lists/*
Docker di Production
Deployment dengan Docker
Docker membuat deployment menjadi sangat konsisten:
- Developer push kode ke GitHub
- CI/CD build Docker image
- Push image ke registry
- Server pull image dan jalankan container
- Aplikasi live
Docker di Cloud
Semua cloud provider besar mendukung Docker:
- AWS: ECS, EKS, Fargate
- Google Cloud: Cloud Run, GKE
- Azure: Container Instances, AKS
- Cloudflare: Workers (serverless container)
Docker di CI/CD
GitHub Actions, GitLab CI, dan Jenkins semuanya mendukung Docker. Kamu bisa menjalankan test di dalam container yang identik dengan production environment.
Docker vs Virtual Machine
Banyak yang bingung bedanya Docker dengan VM. Perbedaan utamanya:
- Docker: Berbagi kernel host, ringan, cepat startup (detik)
- VM: Punya kernel sendiri, berat, lambat startup (menit)
- Docker: Ukuran puluhan hingga ratusan MB
- VM: Ukuran puluhan GB
- Docker: Cocok untuk microservices
- VM: Cocok untuk OS berbeda atau isolasi penuh
Kesimpulan
Docker adalah tool yang wajib dikuasai oleh developer modern. Dengan Docker, kamu bisa menghilangkan masalah “works on my machine”, membuat deployment lebih konsisten, dan mengelola infrastructure lebih efisien.
Mulai dari hal kecil: containerize aplikasi yang sudah kamu buat. Dari situ, pelajari Docker Compose untuk multi-container setup. Seiring waktu, Docker akan menjadi bagian penting dari workflow kamu sebagai developer.
~Erlkim
Artikel Terkait

Belajar Rust dari Nol: Panduan Lengkap untuk Pemula
Panduan lengkap belajar Rust dari nol.
Cara Membuat Website Pertama dengan HTML dan CSS
Tutorial langkah demi langkah membuat website pertama menggunakan HTML dan CSS dari nol.

GitHub Actions: CI/CD Otomatis untuk Project Kamu
Panduan lengkap menggunakan GitHub Actions untuk CI/CD otomatis. Dari build, test, sampai deploy tanpa ribet.
Komentar