Docker dari Nol: Belajar Kontainerisasi
Minggu pertama belajar DevOps, saya langsung nyemplung ke Docker. Ini catatan ringkasnya.
Apa itu Docker?
Docker adalah platform untuk membangun, mengirim, dan menjalankan aplikasi dalam container. Anggap saja container seperti "kotak" yang berisi aplikasi beserta semua dependensinya — sehingga ia bisa berjalan di mana saja.
Masalah yang diselesaikan Docker:
"It works on my machine" — tidak ada lagi. Container berjalan sama persis di laptop, staging, maupun production.
Konsep Dasar
| Istilah | Penjelasan |
|---|---|
| Image | Blueprint/template container (readonly) |
| Container | Instance yang berjalan dari sebuah image |
| Dockerfile | Script untuk mendefinisikan isi sebuah image |
| Registry | Penyimpanan image (contoh: Docker Hub, GHCR) |
Perintah yang Paling Sering Dipakai
# Pull image dari Docker Hub
docker pull nginx
# Jalankan container
docker run -d -p 8080:80 --name my-nginx nginx
# Lihat container yang berjalan
docker ps
# Masuk ke dalam container
docker exec -it my-nginx sh
# Stop & hapus container
docker stop my-nginx && docker rm my-nginx
# Build image dari Dockerfile
docker build -t my-app:latest .
# Lihat semua images
docker images
Membuat Dockerfile Pertama
# Base image
FROM node:20-alpine
# Direktori kerja di dalam container
WORKDIR /app
# Copy file dependency
COPY package*.json ./
RUN npm ci
# Copy source code
COPY . .
# Build aplikasi
RUN npm run build
# Expose port
EXPOSE 3000
# Jalankan aplikasi
CMD ["node", "server.js"]
Docker Compose — Jalankan Banyak Container Sekaligus
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Jalankan dengan: docker compose up -d
Pelajaran Penting
- Multi-stage build — pisahkan stage build dan production untuk image yang lebih kecil
.dockerignore— jangan copynode_moduleske dalam image- Non-root user — jangan jalankan container sebagai
rootdi production - Named volumes — untuk data yang perlu persisten (database, uploads)
Apa Selanjutnya?
- Belajar networking antar container
- Publish image ke Docker Hub / GHCR
- Masuk ke Kubernetes untuk orchestrasi
Tulisan ini adalah catatan pribadi selama proses belajar. Mungkin ada yang kurang tepat — feedback sangat diterima!