Pengenalan Docker — Panduan Lengkap Containerization untuk Developer

Pengenalan Docker — Panduan Lengkap Containerization untuk Developer

18/9/2025 DevOps By Tech Writers
DockerDevOpsContainerizationKubernetesCloud ComputingCI/CDDevelopment ToolsMicroservices

Pendahuluan: Merevolusi Deployment Aplikasi

Docker telah mengubah secara fundamental cara kita develop, test, dan deploy aplikasi. Dengan mem-package aplikasi bersama semua dependencies-nya ke dalam container terstandarisasi, Docker menyelesaikan masalah klasik “it works on my machine” dan memungkinkan deployment yang konsisten di berbagai environment.

Panduan komprehensif ini akan membawa Kamu dari dasar Docker hingga konsep containerization advanced, membantu Kamu mempercepat development workflow dan deploy aplikasi dengan percaya diri.

Daftar Isi

Apa itu Docker?

Docker adalah platform containerization open-source yang memungkinkan developer mem-package aplikasi dengan semua dependencies, libraries, dan configuration files ke dalam unit terstandarisasi yang disebut containers. Containers ini dapat berjalan secara konsisten di infrastruktur apapun yang mendukung Docker.

Mengapa Docker Penting

Masalah yang Diselesaikan Docker:

  • ❌ “Works on my machine” issues
  • ❌ Konflik dependencies antar proyek
  • ❌ Proses deployment yang kompleks
  • ❌ Inkonsistensi environment
  • ❌ Setup development yang lambat

Solusi yang Diberikan Docker:

  • ✅ Environment konsisten di development, testing, dan production
  • ✅ Dependencies aplikasi terisolasi
  • ✅ Rapid application deployment
  • ✅ Efficient resource utilization
  • ✅ Easy scalability

Docker vs Virtual Machines

FiturDocker ContainersVirtual Machines
UkuranMBsGBs
Waktu StartupDetikMenit
PerformaNear-nativeOverhead dari hypervisor
IsolasiProcess-levelComplete OS isolation
Resource UsageLightweightResource-intensive
PortabilitasSangat portableKurang portable

Perbedaan Kunci: Containers berbagi host OS kernel, sedangkan VMs masing-masing menjalankan OS sendiri.

Konsep Inti Docker

Images

Docker images adalah template read-only yang berisi:

  • Application code
  • Runtime environment
  • Dependencies
  • Configuration files

Anggap images sebagai blueprints atau classes dalam programming.

Containers

Containers adalah running instances dari images. Mereka adalah:

  • Isolated processes
  • Lightweight dan portable
  • Dapat distart, stop, dan delete
  • Ephemeral by default

Anggap containers sebagai objects yang di-instantiate dari class.

Dockerfile

Dockerfile adalah text file berisi instruksi untuk build Docker image. Ia mendefinisikan:

  • Base image
  • Dependencies yang akan diinstall
  • Files yang akan di-copy
  • Commands yang akan dijalankan
  • Entry point untuk container

Docker Registry

Docker registry menyimpan dan mendistribusikan Docker images. Yang paling populer adalah Docker Hub, tapi Kamu juga bisa menggunakan:

  • Amazon ECR
  • Google Container Registry
  • Azure Container Registry
  • Private registries

Instalasi Docker

Linux

# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Tambahkan user ke docker group (tidak perlu sudo)
sudo usermod -aG docker $USER

# Verifikasi instalasi
docker --version
docker run hello-world

macOS

Download Docker Desktop dari docker.com

Windows

Download Docker Desktop for Windows dari docker.com

Docker Images dan Containers

Pahami perbedaan antara Docker images (template) dan containers (program yang sedang berjalan). Pelajari cara mengunduh, membuat, mengelola, dan menjalankan keduanya.

Bekerja dengan Images

Images adalah template dasar dari Docker. Di bagian ini kamu akan belajar cara mengunduh images dari internet, membuat image sendiri, dan mengelolanya dengan efisien.

# Pull image dari Docker Hub
docker pull nginx:latest
docker pull node:18-alpine

# List local images
docker images

# Hapus image
docker rmi nginx:latest

# Build image dari Dockerfile
docker build -t myapp:1.0 .

# Tag image
docker tag myapp:1.0 username/myapp:1.0

# Push ke registry
docker push username/myapp:1.0

Bekerja dengan Containers

Containers adalah program yang sedang berjalan dari images. Di sini kamu akan belajar perintah-perintah penting untuk menjalankan, mengelola, memantau, dan memperbaiki containers dalam pekerjaan sehari-hari kamu.

# Jalankan container
docker run nginx

# Jalankan di detached mode (background)
docker run -d nginx

# Jalankan dengan port mapping
docker run -d -p 8080:80 nginx

# Jalankan dengan name
docker run -d --name my-nginx -p 8080:80 nginx

# Jalankan dengan environment variables
docker run -d -e DB_HOST=localhost -e DB_PORT=5432 myapp

# Jalankan dengan volume mount
docker run -d -v $(pwd):/app myapp

# List running containers
docker ps

# List semua containers (termasuk stopped)
docker ps -a

# Stop container
docker stop my-nginx

# Start stopped container
docker start my-nginx

# Hapus container
docker rm my-nginx

# View container logs
docker logs my-nginx
docker logs -f my-nginx  # Follow logs

# Execute command di running container
docker exec -it my-nginx bash

# Inspect container
docker inspect my-nginx

Membuat Dockerfiles

Dockerfiles adalah file yang berisi instruksi untuk membangun Docker images. Pelajari cara menulis Dockerfiles yang efisien untuk berbagai bahasa pemrograman dan jenis aplikasi.

Basic Node.js Dockerfile

Dockerfile Node.js dasar menunjukkan langkah-langkah penting: memilih image dasar, menyiapkan folder kerja, menginstal library yang dibutuhkan, menyalin kode, dan menentukan perintah awal.

FROM node:18-alpine

# Set working directory
WORKDIR /app

# Copy package files
COPY package*.json ./

# Install dependencies
RUN npm ci --only=production

# Copy application code
COPY . .

# Expose port
EXPOSE 3000

# Define environment variable
ENV NODE_ENV=production

# Start application
CMD ["node", "server.js"]

Multi-stage Build (Optimized)

Multi-stage build memisahkan tahap kompilasi dari tahap eksekusi, sehingga hasil akhir image jauh lebih kecil karena tidak perlu menyertakan alat-alat pembangunan.

# Stage 1: Build
FROM node:18-alpine AS builder

WORKDIR /app

COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

# Stage 2: Production
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

# Copy built files dari builder stage
COPY --from=builder /app/dist ./dist

EXPOSE 3000

CMD ["node", "dist/server.js"]

Python Dockerfile

Aplikasi Python memiliki cara pengaturan library yang berbeda. Contoh ini menunjukkan cara terbaik mengemas aplikasi Python ke dalam Docker dengan pip dan image yang minimal.

FROM python:3.11-slim

WORKDIR /app

# Install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy application
COPY . .

EXPOSE 8000

CMD ["python", "app.py"]

Docker Commands Cheat Sheet

Referensi cepat untuk perintah Docker yang paling sering digunakan, dikelompokkan berdasarkan kategori.

Container Management

Perintah-perintah penting untuk membuat, menjalankan, menghentikan, dan mengelola container sepanjang masa hidup container-nya.

# Build image
docker build -t myapp:latest .

# Run container
docker run -d -p 3000:3000 --name myapp myapp:latest

# Stop container
docker stop myapp

# Start container
docker start myapp

# Restart container
docker restart myapp

# Hapus container
docker rm myapp

# Hapus semua stopped containers
docker container prune

# View logs
docker logs -f myapp

# Execute command
docker exec -it myapp sh

# Copy files
docker cp myapp:/app/file.txt ./file.txt

System Management

Perintah-perintah untuk memantau sumber daya Docker, melihat penggunaan disk, dan membersihkan images, containers, dan volumes yang tidak terpakai agar disk tetap tersedia.

# View Docker system info
docker info

# View disk usage
docker system df

# Clean up unused resources
docker system prune

# Hapus semua unused images
docker image prune -a

# Hapus semua unused volumes
docker volume prune

Docker Compose

Docker Compose menyederhanakan cara mengelola aplikasi yang terdiri dari banyak container menggunakan file konfigurasi YAML. Tulis sekali, jalankan berkali-kali dengan perintah sederhana.

docker-compose.yml Example

Contoh lengkap yang menunjukkan cara mengatur web application, database, cache, dan reverse proxy dengan networking dan penyimpanan data yang baik.

version: '3.8'

services:
  # Aplikasi web
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis
    volumes:
      - ./logs:/app/logs
    restart: unless-stopped

  # PostgreSQL database
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    volumes:
      - db-data:/var/lib/postgresql/data
    restart: unless-stopped

  # Redis cache
  redis:
    image: redis:7-alpine
    restart: unless-stopped

  # Nginx reverse proxy
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - web
    restart: unless-stopped

volumes:
  db-data:

Docker Compose Commands

Perintah-perintah umum untuk mengelola service yang telah didefinisikan di file docker-compose.yml, mulai dari menjalankan, menghentikan, hingga melihat log.

# Start services
docker-compose up -d

# Stop services
docker-compose down

# View logs
docker-compose logs -f

# View running services
docker-compose ps

# Execute command di service
docker-compose exec web sh

# Rebuild images
docker-compose build

# Pull latest images
docker-compose pull

Best Practices

Mengikuti praktik terbaik saat membuat Docker images memastikan image kamu efisien, aman, dan mudah dipelihara. Petunjuk ini membantu mengurangi ukuran image, mempercepat proses build, dan meningkatkan keamanan.

1. Gunakan Official Base Images

Image resmi selalu diperbarui, sudah diperbaiki dari segi keamanan, dan didukung oleh komunitas Docker. Mereka lebih handal dan kompatibel.

# ✅ Baik
FROM node:18-alpine

# ❌ Hindari
FROM random-user/custom-node

2. Gunakan .dockerignore

Mirip dengan .gitignore, file ini mencegah file-file yang tidak perlu ikut masuk ke dalam image, sehingga ukuran image lebih kecil dan build lebih cepat.

node_modules
npm-debug.log
.git
.env
*.md
.vscode

3. Minimize Layers

Setiap perintah dalam Dockerfile membuat satu layer. Dengan menggabungkan perintah, jumlah layer berkurang, sehingga image lebih kecil dan build lebih cepat.

# ❌ Buruk - multiple RUN commands
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y git

# ✅ Baik - digabung dalam single layer
RUN apt-get update && apt-get install -y \
    curl \
    git \
    && rm -rf /var/lib/apt/lists/*

4. Leverage Build Cache

Docker menyimpan cache untuk setiap layer. Dengan mengurutkan perintah dari yang paling jarang berubah ke yang paling sering berubah, layer yang tidak berubah dapat digunakan kembali, sehingga rebuild lebih cepat.

# Copy dependency files dulu (berubah lebih jarang)
COPY package*.json ./
RUN npm install

# Copy source code terakhir (berubah lebih sering)
COPY . .

5. Gunakan Multi-stage Builds

Multi-stage build menggunakan beberapa tahap (stage) untuk memisahkan proses pembangunan dan eksekusi. Hanya hasil akhir yang diperlukan yang disertakan dalam image final, alat-alat pembangunan dikeluarkan.

6. Jangan Run sebagai Root

Menjalankan container dengan user root sangat berbahaya dari sisi keamanan. Selalu buat user biasa untuk menjalankan container, agar jika terjadi pelanggaran keamanan, dampaknya terbatas.

# Buat non-root user
RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001

# Switch ke non-root user
USER nodejs

CMD ["node", "server.js"]

7. Gunakan Health Checks

Health check memungkinkan Docker untuk memeriksa apakah container berjalan dengan baik. Jika health check gagal, Docker bisa secara otomatis menjalankan ulang container atau melakukan tindakan lainnya.

HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:3000/health || exit 1

Docker di Production

Menjalankan Docker di production memerlukan perhatian khusus pada keamanan, pengelolaan sumber daya, dan pemantauan. Praktik-praktik ini memastikan container kamu berjalan stabil dan aman dalam skala besar.

Pertimbangan Security

Implementasikan tindakan keamanan ini untuk melindungi aplikasi dari celah keamanan dan akses tidak sah.

  1. Scan images untuk vulnerabilities
docker scan myapp:latest
  1. Gunakan specific image tags (bukan latest)
FROM node:18.16.0-alpine3.17
  1. Limit container resources
docker run -d \
  --memory="512m" \
  --cpus="1.0" \
  myapp

Monitoring

Memantau container secara terus-menerus membantu menemukan masalah lebih awal dan menjaga performa tetap optimal. Gunakan tools dan teknik ini untuk memantau kesehatan dan penggunaan resource container.

  • Container stats: docker stats — Lihat penggunaan CPU, memory, dan I/O secara real-time
  • Health checks: Atur HEALTHCHECK dalam Dockerfile — Deteksi kegagalan container secara otomatis
  • Logging: Kumpulkan log dari semua container dengan ELK stack atau yang sejenis — Analisis masalah dari satu tempat
  • Metrics: Prometheus + Grafana — Lihat performa container dari waktu ke waktu

Use Cases Umum

Lihat contoh nyata tentang bagaimana Docker digunakan dalam berbagai skenario development dan deployment.

1. Development Environment

Gunakan container untuk memastikan semua anggota tim menggunakan environment yang sama, menghindari masalah “berjalan di komputer saya tapi tidak di komputer tim”.

docker run -d \
  -v $(pwd):/app \
  -p 3000:3000 \
  node:18-alpine \
  npm run dev

2. Arsitektur Microservices

Pecah aplikasi monolitik menjadi service-service kecil yang independen. Setiap service berjalan di container-nya sendiri, diatur dengan Docker Compose atau Kubernetes agar saling berkomunikasi dengan lancar.

3. CI/CD Pipelines

Gunakan Docker dalam pipeline CI/CD kamu untuk memastikan setiap build dan test berjalan di environment yang sama. Hal ini menghilangkan masalah yang terjadi karena perbedaan environment.

# .gitlab-ci.yml
test:
  image: node:18-alpine
  script:
    - npm ci
    - npm test

4. Database Testing

Jalankan database dalam container untuk keperluan testing. Setiap kali test dijalankan, database dimulai fresh dan terisolasi.

docker run -d \
  -e POSTGRES_PASSWORD=testpass \
  -p 5432:5432 \
  postgres:15-alpine

Troubleshooting

Masalah-masalah umum Docker dan cara mengatasinya agar kamu bisa langsung kembali bekerja.

Container Tidak Mau Start

Teknik debugging untuk menemukan penyebab container tidak mau jalan dan cara memperbaikinya.

# Check logs
docker logs container-name

# Inspect container
docker inspect container-name

Port Sudah Digunakan

Atasi konflik port ketika beberapa container atau aplikasi membutuhkan port yang sama.

# Cari process yang menggunakan port
lsof -i :3000

# Atau gunakan port berbeda
docker run -p 3001:3000 myapp

Out of Disk Space

Cleanup unused Docker artifacts untuk reclaim disk space dari old images, containers, dan volumes.

# Clean up
docker system prune -a --volumes

Permission Denied

Fix permission issues ketika Docker commands gagal karena user access restrictions.

# Tambahkan user ke docker group
sudo usermod -aG docker $USER
# Kemudian logout dan login lagi

Kesimpulan

Docker telah merevolusi pengembangan software modern dengan menyediakan containerization yang konsisten, portable, dan efisien. Dengan menguasai Docker, Kamu dapat:

  • Streamline development dengan environment yang konsisten
  • Simplify deployment di berbagai platform
  • Improve scalability dengan container orchestration
  • Enhance security melalui isolasi
  • Accelerate CI/CD pipelines

Mulai dari kecil dengan mem-containerize satu aplikasi, kemudian adopsi Docker Compose untuk multi-container setups secara bertahap. Seiring kebutuhan berkembang, explore platform orchestration seperti Kubernetes untuk production-scale deployments.

Key Takeaways:

  • Gunakan official base images dan keep them updated
  • Leverage multi-stage builds untuk images yang lebih kecil
  • Follow security best practices (non-root users, scanning)
  • Gunakan Docker Compose untuk local multi-container development
  • Implementasikan health checks dan monitoring untuk production

Artikel Terkait:


Terakhir diperbarui: 8 Januari 2026