Panduan Lengkap Belajar Docker untuk Pemula 2026 - BagasUnix
Skip to content Skip to sidebar Skip to footer

Panduan Lengkap Belajar Docker untuk Pemula 2026

Lebih dari 13 juta developer aktif menggunakan Docker setiap bulan — dan kalau kamu belum termasuk di dalamnya, kamu sedang ketinggalan satu skill yang diwajibkan di hampir setiap lowongan kerja DevOps dan backend 2026. Gw ingat betul, dulu gw menghabiskan 3 jam penuh cuma buat debug aplikasi yang jalan sempurna di laptop tapi crash total begitu di-deploy ke server. Masalahnya? Dependency version yang beda. Setelah kenal Docker, masalah itu hilang dalam hitungan menit.

Panduan ini dibuat buat kamu yang mau belajar Docker untuk pemula dari nol sampai bisa deploy aplikasi nyata. Nggak cuma teori, tapi langsung praktik dengan tiga studi kasus: full-stack web app, WordPress, dan microservices. Yuk, mulai! 🚀

Apa Itu Docker dan Mengapa Penting di 2026?

Definisi Docker dan Container

Docker itu pada dasarnya adalah platform buat mengemas aplikasi beserta seluruh dependency-nya ke dalam satu unit yang disebut container. Bayangin container ini kayak kotak bekal — semua yang aplikasi butuhkan (library, runtime, config) sudah ada di dalamnya, jadi bisa jalan di mana pun tanpa masalah.

Container itu bukan virtual machine. Lebih ringan, lebih cepat, dan lebih efisien. Satu server bisa menjalankan ratusan container sekaligus tanpa overhead yang bikin lemot.

Perbedaan Docker vs Virtual Machine

Ini pertanyaan klasik yang sering muncul saat belajar Docker untuk pemula. Perbedaannya simpel:

  • Virtual Machine (VM): Punya OS sendiri, butuh resource besar, boot time bisa menit-an
  • Docker Container: Share kernel host OS, ringan (megabytes vs gigabytes), start dalam detik
  • VM = rumah pribadi; Container = apartemen yang share fondasi yang sama

VM tetap penting untuk use case tertentu (misalnya butuh OS berbeda), tapi untuk sebagian besar workflow development modern, Docker jauh lebih praktis.

Mengapa Docker Relevan untuk Developer 2026?

Di 2026, Docker bukan lagi "nice to have" — ini sudah jadi skill wajib. Docker Desktop versi terbaru sekarang terintegrasi langsung dengan AI/ML tools, mendukung container orchestration yang lebih canggih, dan performanya jauh lebih baik di chip ARM (Apple Silicon M-series dan Snapdragon X).

Perusahaan rata-rata sekarang mengharapkan developer bisa bikin Dockerfile dan docker-compose.yml sejak hari pertama kerja. Nggak percaya? Coba buka LinkedIn dan cari lowongan backend developer — Docker ada di hampir semua listing.

Manfaat Docker untuk Workflow Development

  • Consistency: "Works on my machine" bukan alasan lagi. App jalan sama persis di dev, staging, dan production
  • Isolation: Project A pakai Node 18, Project B pakai Node 20? Nggak masalah, masing-masing container punya environment sendiri
  • Speed: Spin up database, message queue, dan backend dalam hitungan detik pakai Docker Compose
  • Collaboration: Tim baru tinggal jalankan docker-compose up — langsung punya environment yang sama

Arsitektur dan Komponen Utama Docker

Sebelum mulai nulis kode, penting buat paham bagian-bagian Docker. Anggap aja kayak mobil — kamu perlu tahu mana mesin, mana roda, dan mana bahan bakarnya.

Docker Engine: Jantung Sistem

Docker Engine adalah service yang berjalan di background dan mengeksekusi semua perintah Docker. Dia terdiri dari:

  • Docker Daemon (dockerd): Service background yang mengelola container
  • Docker CLI (docker): Command line interface yang kamu pakai sehari-hari
  • REST API: Interface yang menghubungkan CLI ke daemon

Docker Images: Template Aplikasi

Image itu blueprint atau template. Bayangin resep masakan — dia berisi instruksi lengkap buat "membuat" aplikasi kamu. Image bersifat immutable, artinya nggak bisa diubah setelah dibuat. Kalau mau perubahan, bikin image baru.

Docker Containers: Instance yang Berjalan

Kalau image itu resepnya, container itu hasil masakannya. Container adalah instance yang benar-benar berjalan. Kamu bisa bikin banyak container dari satu image yang sama — kayak bikin 10 porsi nasi goreng dari satu resep.

Docker Registry dan Docker Hub

Docker Hub adalah "App Store"-nya Docker. Di sini kamu bisa:

  • Menemukan official images (nginx, postgres, redis, dll)
  • Menyimpan image buatan sendiri (free tier tersedia)
  • Berbagi image dengan tim atau komunitas

Dockerfile: Blueprint untuk Membuat Image

Dockerfile adalah file teks berisi instruksi step-by-step buat membangun image. Ini salah satu skill paling penting saat belajar Docker untuk pemula. Nanti kita akan bahas detail di section khusus.

Instalasi Docker Step-by-Step

System Requirements 2026

  • Windows: Windows 10/11 dengan WSL2 enabled, minimal 4GB RAM
  • macOS: macOS 12 Monterey atau lebih baru, chip Intel atau Apple Silicon
  • Linux: Kernel 4.0+, systemd atau sysvinit, minimal 2GB RAM

Install Docker di Windows (WSL2)

  1. Download Docker Desktop dari docker.com/products/docker-desktop
  2. Pastikan WSL2 sudah aktif (jalankan di PowerShell sebagai Admin):
# Aktifkan WSL2
wsl --install

# Set WSL2 sebagai default version
wsl --set-default-version 2

# Restart komputer setelah ini
  1. Install Docker Desktop dan pilih "Use WSL 2 based engine" saat setup
  2. Restart dan verifikasi:
docker --version
# Output: Docker version 27.x.x, build xxxxxxx

docker run hello-world
# Output: Hello from Docker! ...

Install Docker di macOS

# Pakai Homebrew (recommended)
brew install --cask docker

# Atau download langsung dari docker.com
# Pilih chip yang sesuai: Apple Silicon atau Intel

Buka Docker Desktop dari Applications, tunggu sampai icon di menu bar berhenti berputar, lalu verifikasi dengan docker --version.

Install Docker di Linux (Ubuntu/Debian)

# Update package index
sudo apt update

# Install dependencies
sudo apt install ca-certificates curl gnupg

# Tambahkan Docker GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Tambahkan repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Tambahkan user ke docker group (biar nggak perlu sudo)
sudo usermod -aG docker $USER
newgrp docker

# Verifikasi
docker run hello-world

Verifikasi dan Troubleshooting Instalasi

Kalau docker run hello-world gagal, cek beberapa hal ini:

  • Pastikan Docker service running: sudo systemctl start docker
  • Di Windows, pastikan WSL2 backend aktif di Docker Desktop settings
  • Permission denied? Jalankan sudo usermod -aG docker $USER lalu logout-login

Docker Commands Dasar yang Wajib Dikuasai

Ini nih bagian yang paling seru. Sambil belajar Docker untuk pemula, hafalkan command-command berikut — ini yang bakal kamu pakai setiap hari.

Perintah Manajemen Image

# Pull image dari Docker Hub
docker pull nginx:latest

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

# Lihat semua image
docker images

# Hapus image
docker rmi myapp:v1

# Hapus semua image yang nggak dipakai
docker image prune -a

Perintah Manajemen Container

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

# Penjelasan:
# -d = detached mode (jalan di background)
# -p 8080:80 = map port 8080 host ke port 80 container
# --name web = kasih nama container "web"

# Lihat container yang running
docker ps

# Lihat semua container (termasuk yang stopped)
docker ps -a

# Stop container
docker stop web

# Hapus container
docker rm web

# Masuk ke dalam container
docker exec -it web bash

# Lihat log container
docker logs -f web

Perintah Networking

# Buat network baru
docker network create my-network

# Hubungkan container ke network
docker network connect my-network web

# Lihat detail network
docker network inspect my-network

# Lihat semua network
docker network ls

Perintah Volumes

# Buat volume
docker volume create my-data

# Jalankan container dengan volume
docker run -d -v my-data:/app/data postgres:16

# Lihat semua volume
docker volume ls

# Hapus volume
docker volume rm my-data

Cheat Sheet Lengkap Docker CLI

CommandKegunaan
docker pullDownload image
docker build -t name .Buat image dari Dockerfile
docker runJalankan container baru
docker psList container aktif
docker exec -it [name] bashMasuk ke container
docker logs [name]Lihat log container
docker stop/start/rmKelola lifecycle container
docker system pruneBersihkan semua yang nggak dipakai
docker compose up -dJalankan multi-container
docker statsMonitor resource usage real-time

Membuat Dockerfile dari Nol

Anatomi Dockerfile

Setiap Dockerfile punya instruksi-instruksi kunci. Ini yang perlu kamu pahami:

# FROM = base image (wajib ada, harus di baris pertama)
FROM node:20-alpine

# WORKDIR = set direktori kerja di dalam container
WORKDIR /app

# COPY = salin file dari host ke container
COPY package*.json ./

# RUN = jalankan perintah saat build
RUN npm ci --only=production

# COPY sisa file
COPY . .

# EXPOSE = deklarasi port (dokumentasi, bukan publish)
EXPOSE 3000

# CMD = perintah yang dijalankan saat container start
CMD ["node", "server.js"]

Best Practices Menulis Dockerfile

  • Pakai specific tag, jangan latest: node:20-alpine lebih aman dari node:latest
  • Manfaatkan layer caching: Copy package.json dulu sebelum copy source code
  • Minimalkan layer: Gabungkan RUN commands yang berkaitan
  • Pakai .dockerignore: Jangan copy node_modules, .git, dll ke dalam image
  • Jangan jalankan sebagai root: Tambahkan user non-root untuk keamanan

Multi-Stage Build untuk Image Lebih Ringan

Multi-stage build itu teknik di mana kamu pakai satu Dockerfile dengan banyak FROM statement. Hasil build dari stage pertama di-copy ke stage berikutnya, tapi file yang nggak diperlukan (seperti dev dependencies) nggak ikut.

# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Stage 2: Production
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/server.js"]

Hasilnya? Image yang tadinya 800MB bisa menyusut jadi 150MB. Perbedaan yang signifikan buat deployment!

Contoh Dockerfile untuk Aplikasi Node.js

FROM node:20-alpine

# Buat user non-root
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

WORKDIR /app

# Copy dependency files dulu (cache layer)
COPY package*.json ./
RUN npm ci --only=production

# Copy source code
COPY . .

# Ganti ownership ke non-root user
RUN chown -R appuser:appgroup /app
USER appuser

EXPOSE 3000

HEALTHCHECK --interval=30s --timeout=3s \
  CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1

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

Contoh Dockerfile untuk Aplikasi Python

FROM python:3.12-slim

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    && rm -rf /var/lib/apt/lists/*

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

COPY . .

# Buat non-root user
RUN useradd --create-home appuser
USER appuser

EXPOSE 8000

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]

Docker Compose: Mengelola Multi-Container

Apa Itu Docker Compose?

Docker Compose itu tool buat mendefinisikan dan menjalankan banyak container sekaligus pakai satu file YAML. Bayangin kamu punya aplikasi yang butuh backend, database, dan Redis — semua bisa didefinisikan dan dijalankan dalam satu command.

Kalau kamu lagi belajar Docker untuk pemula, Docker Compose adalah game changer. Nggak perlu lagi buka 5 terminal buat jalankan 5 service.

Struktur docker-compose.yml

# docker-compose.yml
version: "3.8"

services:
  # Service backend
  backend:
    build: ./backend
    ports:
      - "3000:3000"
    environment:
      - DB_HOST=database
      - REDIS_URL=redis://cache:6379
    depends_on:
      - database
      - cache
    volumes:
      - ./backend:/app
      - /app/node_modules
    networks:
      - app-network

  # Service database
  database:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret123
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - app-network

  # Service cache
  cache:
    image: redis:7-alpine
    networks:
      - app-network

volumes:
  db-data:

networks:
  app-network:
    driver: bridge

Deploy Aplikasi Lengkap (Backend + Frontend + Database)

Mari kita buat setup nyata: React frontend + Express backend + MongoDB.

# docker-compose.yml untuk full-stack app
version: "3.8"

services:
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "3001:3000"
    depends_on:
      - backend

  backend:
    build: ./backend
    ports:
      - "3000:3000"
    environment:
      - MONGO_URI=mongodb://database:27017/myapp
      - NODE_ENV=development
    depends_on:
      - database
    volumes:
      - ./backend:/app
      - /app/node_modules

  database:
    image: mongo:7
    ports:
      - "27017:27017"
    volumes:
      - mongo-data:/data/db

volumes:
  mongo-data:

Jalankan semua dengan satu command:

# Build dan jalankan semua container
docker compose up -d --build

# Lihat status semua service
docker compose ps

# Lihat log gabungan semua service
docker compose logs -f

# Stop semua
docker compose down

# Stop dan hapus volumes juga
docker compose down -v

Environment Variables dan .env File

Jangan hardcode credentials di docker-compose.yml. Pakai file .env:

# .env
POSTGRES_DB=myapp
POSTGRES_USER=admin
POSTGRES_PASSWORD=supersecret123
NODE_ENV=production
API_KEY=your-api-key-here

Lalu referensikan di docker-compose.yml:

services:
  database:
    image: postgres:16
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

Penting: Tambahkan .env ke .gitignore! Jangan pernah commit credentials ke repository.

Perintah Docker Compose Essential

# Jalankan di background
docker compose up -d

# Jalankan satu service saja
docker compose up -d backend

# Rebuild image (kalau ada perubahan Dockerfile)
docker compose up -d --build

# Masuk ke container service tertentu
docker compose exec backend sh

# Lihat resource usage
docker compose top

# Restart satu service
docker compose restart backend

Networking dan Data Persistence

Tipe-tipe Network Docker

  • bridge (default): Container bisa komunikasi satu sama lain lewat internal network. Cocok untuk single-host deployment
  • host: Container pakai network langsung dari host. Performa lebih baik tapi nggak ada isolasi
  • overlay: Untuk komunikasi antar host di Docker Swarm. Kamu butuh ini kalau sudah masuk clustering
  • none: Nggak ada network sama sekali. Cocok untuk container yang butuh isolasi total

Menghubungkan Antar Container

Container dalam satu Docker Compose file otomatis bisa saling akses pakai nama service. Misalnya, backend bisa connect ke database pakai hostname database tanpa perlu tahu IP-nya.

# Di dalam kode backend, cukup pakai nama service
# Contoh connection string:
mongodb://database:27017/myapp
redis://cache:6379
postgres://user:pass@database:5432/mydb

Volumes vs Bind Mounts

  • Named Volume (-v my-data:/app/data): Dikelola oleh Docker, persist walau container dihapus. Cocok untuk production data
  • Bind Mount (-v ./src:/app/src): Langsung map folder host ke container. Cocok untuk development (live reload)

Gw pribadi pakai bind mount saat development (biar bisa edit kode langsung ter-reflect di container) dan named volume saat production (lebih aman dan ter-managed).

Backup dan Restore Data Container

# Backup volume ke file tar
docker run --rm -v my-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/my-data-backup.tar.gz -C /data .

# Restore dari file tar
docker run --rm -v my-data:/data -v $(pwd):/backup alpine \
  tar xzf /backup/my-data-backup.tar.gz -C /data

Project Praktik: Deploy Aplikasi Full-Stack

Sekarang waktunya praktik beneran. Ini tiga studi kasus yang bisa kamu ikuti langsung.

Studi Kasus 1: Web App dengan React + Express + MongoDB

Project ini cocok buat yang lagi belajar Docker untuk pemula dan mau lihat gimana Docker menyatukan semua komponen full-stack.

# Struktur folder
project/
├── frontend/
│   ├── Dockerfile
│   ├── package.json
│   └── src/
├── backend/
│   ├── Dockerfile
│   ├── package.json
│   └── server.js
└── docker-compose.yml

Frontend Dockerfile:

# frontend/Dockerfile
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80

Backend Dockerfile:

# backend/Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Setelah semua file siap, tinggal satu command:

docker compose up -d --build
# Frontend: http://localhost:3001
# Backend API: http://localhost:3000
# MongoDB: localhost:27017

Studi Kasus 2: WordPress dengan Docker Compose

# docker-compose.yml untuk WordPress
version: "3.8"

services:
  wordpress:
    image: wordpress:6-php8.2-apache
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp-content:/var/www/html/wp-content
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_password
      MYSQL_ROOT_PASSWORD: root_password
    volumes:
      - db-data:/var/lib/mysql

volumes:
  wp-content:
  db-data:

Jalankan, buka http://localhost:8080, dan WordPress siap dipakai dalam hitungan detik!

Studi Kasus 3: Development Environment untuk Microservices

# docker-compose.yml untuk microservices
version: "3.8"

services:
  api-gateway:
    build: ./gateway
    ports:
      - "8000:

BACA JUGA

Post a Comment for "Panduan Lengkap Belajar Docker untuk Pemula 2026"