Docker untuk Pemula: Panduan Lengkap dari Nol • Erlkim

Docker untuk Pemula: Panduan Lengkap dari Nol

Docker untuk Pemula: Panduan Lengkap dari Nol
Jun 13, 2026 ... views
12 min

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 ringan
  • WORKDIR /app: Set working directory
  • COPY package*.json ./: Copy file package.json
  • RUN npm install: Install dependencies
  • COPY . .: Copy semua file project
  • EXPOSE 3000: Buka port 3000
  • CMD ["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:

  1. Developer push kode ke GitHub
  2. CI/CD build Docker image
  3. Push image ke registry
  4. Server pull image dan jalankan container
  5. 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

Komentar

0/2000