Docker

Belajar Docker dari Nol: Konsep Dasar yang Perlu Dipahami

Belajar Docker dari Nol: Konsep Dasar yang Perlu Dipahami

Docker telah mengubah cara kita develop, ship, dan run applications. Di tahun 2026, hampir semua startup dan perusahaan besar menggunakan Docker dalam workflow mereka. Tapi sebelum langsung praktik, pahami dulu konsep dasarnya.

Ilustrasi konsep dasar Docker untuk pemula

Kenapa Docker Penting?

Sebelum Docker, problem utama developer adalah: "Di komputer saya bisa, di server kok error?" Docker menyelesaikan masalah ini dengan membungkus aplikasi beserta semua dependensinya ke dalam container yang portable.

  • Konsistensi — environment yang sama di development, staging, dan production
  • Isolation — aplikasi satu tidak mengganggu aplikasi lain
  • Portability — container bisa jalan di mana saja yang ada Docker
  • Scalability — mudah scale horizontal dengan menambah container

Container vs VM

Container bukanlah virtual machine. Ini perbedaan fundamental:

  • Container — share kernel dengan host OS, hanya meng-isolasi process dan filesystem. Startup dalam hitungan detik, footprint MB.
  • VM — punya kernel sendiri, meng-emu entire OS. Startup dalam hitungan menit, footprint GB.

Dalam praktiknya, satu VPS 2GB RAM bisa menjalankan 20+ container, tapi cuma 2-3 VM. Itulah kenapa Docker menjadi standar untuk microservices.

Image vs Container

Image adalah blueprint (template), Container adalah instance dari image. Analogi sederhana:

  • Image = resep masakan (blueprint)
  • Container = masakan yang sudah jadi (instance)

Satu image bisa menghasilkan banyak container, seperti satu resep bisa menghasilkan banyak porsi masakan. Yang membuat Docker efisien: semua container dari image yang sama share layer yang sama, jadi hemat disk space.

Dockerfile

Dockerfile adalah instruksi untuk membangun image. Setiap baris adalah satu layer:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

Best Practice Dockerfile

  • Gunakan .dockerignore untuk exclude file yang tidak perlu (node_modules, .git, .env)
  • Order layer dari yang jarang berubah ke yang sering berubah (build cache)
  • Gunakan multi-stage build untuk mengurangi image size
  • Jangan run sebagai root — buat user khusus
# Multi-stage build example
FROM node:18-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
CMD ["node", "dist/index.js"]

Volume

Volume memungkinkan data persist setelah container dihapus. Tanpa volume, semua data di container hilang saat container dihapus — termasuk database, uploads, dan logs.

# Named volume (recommended)
docker run -v pgdata:/var/lib/postgresql/data postgres:16

# Bind mount (untuk development)
docker run -v $(pwd)/src:/app/src node:18-alpine

Network

Docker network memungkinkan container berkomunikasi satu sama lain. Tiga tipe network utama:

  • bridge — default, container dalam satu host bisa saling akses
  • host — container share network stack dengan host (performa lebih baik)
  • overlay — untuk multi-host networking (Docker Swarm)

Saat menggunakan Docker Compose, semua service otomatis berada di network bridge yang sama. Container bisa akses service lain menggunakan nama service sebagai hostname.

Perintah Dasar Docker

# Jalankan container
docker run -d -p 8080:80 nginx:alpine

# Lihat container yang berjalan
docker ps

# Masuk ke container
docker exec -it container_name sh

# Lihat logs
docker logs -f container_name

# Hentikan dan hapus container
docker stop container_name && docker rm container_name

# Hapus image yang tidak terpakai
docker image prune -a

Langkah Selanjutnya

Setelah memahami konsep dasar ini, langkah selanjutnya adalah belajar Docker Compose untuk manage multi-container applications. Untuk panduan lengkap membangun server, baca panduan self-hosting dari nol.