Cara Install dan Konfigurasi Docker di Debian 12 Bookworm
Cara Install dan Konfigurasi Docker di Debian 12 Bookworm
Docker telah menjadi standar de facto untuk containerization dalam modern development workflow. Debian 12 (Bookworm) menyediakan dukungan Docker yang sangat baik dengan repository official yang up-to-date. Artikel ini akan membahas instalasi Docker di Debian 12 secara lengkap beserta konfigurasi optimal untuk development dan production.
Persiapan Sebelum Instalasi
Update Sistem
# Update package list dan upgrade existing packages
sudo apt update
sudo apt upgrade -y
# Install dependencies yang dibutuhkan
sudo apt install -y ca-certificates curl gnupg lsb-release
Hapus Docker Versi Lama (jika ada)
# Hapus versi Docker lama jika terinstall dari repository Debian
sudo apt remove docker.io docker-doc docker-compose podman-docker containerd runc
# Hapus juga file konfigurasi lama (opsional)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Instalasi Docker dari Official Repository
Menggunakan official Docker repository direkomendasikan untuk mendapatkan versi terbaru.
1. Add Docker GPG Key
# Buat directory untuk keyrings
sudo install -m 0755 -d /etc/apt/keyrings
# Download dan add Docker GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Set permission keyring
sudo chmod a+r /etc/apt/keyrings/docker.gpg
2. Add Docker Repository
# Add repository ke APT sources
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update package list
sudo apt update
3. Install Docker Engine
# Install Docker Engine, CLI, containerd, dan Docker Compose
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4. Verifikasi Instalasi
# Cek Docker version
docker --version
# Output: Docker version 24.0.7, build afdd53b
# Cek Docker Compose version
docker compose version
# Output: Docker Compose version v2.21.0
# Test dengan running hello-world container
sudo docker run hello-world
# Output akan menampilkan pesan "Hello from Docker!"
Konfigurasi User Permissions
Secara default, Docker hanya bisa dijalankan oleh root. Untuk security dan kemudahan, tambahkan user ke docker group.
1. Add User ke Docker Group
# Tambahkan current user ke docker group
sudo usermod -aG docker $USER
# Verifikasi user sudah dalam group
groups $USER
# Apply group membership (logout dan login kembali, atau gunakan):
newgrp docker
# Test tanpa sudo
docker run hello-world
2. Setup Docker Rootless Mode (Opsional tapi Recommended untuk Security)
Rootless mode memungkinkan Docker berjalan tanpa root privileges.
# Install uidmap
sudo apt install -y uidmap
# Setup rootless Docker
dockerd-rootless-setuptool.sh install
# Atau setup manual
curl -fsSL https://get.docker.com/rootless | sh
# Export environment variables (tambahkan ke ~/.bashrc)
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id - u)/docker.sock
# Start rootless daemon
dockerd-rootless.sh
Konfigurasi Docker Daemon
1. Konfigurasi Dasar daemon.json
# Buat atau edit konfigurasi Docker
sudo nano /etc/docker/daemon.json
Konfigurasi optimal untuk development:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true,
"userland-proxy": false,
"experimental": false,
"metrics-addr": "0.0.0.0:9323",
"default-address-pools": [
{
"base": "172.30.0.0/16",
"size": 24
}
]
}
Penjelasan opsi:
- log-driver: Format logging container
- storage-driver: overlay2 adalah driver tercepat untuk modern kernels
- live-restore: Container tetap berjalan saat daemon restart
- userland-proxy: Disable untuk performance lebih baik
- default-address-pools: Pool IP untuk Docker networks
2. Reload Docker Daemon
# Reload konfigurasi
sudo systemctl daemon-reload
sudo systemctl restart docker
# Cek status
sudo systemctl status docker
3. Enable Docker Start on Boot
# Enable Docker service
sudo systemctl enable docker
# Enable containerd (dependency Docker)
sudo systemctl enable containerd
Optimasi Storage dan Performance
1. Setup Docker Data Directory di Disk Terpisah (Opsional)
# Stop Docker
sudo systemctl stop docker
sudo systemctl stop containerd
# Copy data ke lokasi baru (misal: /mnt/docker-data)
sudo mkdir -p /mnt/docker-data
sudo rsync -aP /var/lib/docker/ /mnt/docker-data/
# Backup dan hapus data lama
sudo mv /var/lib/docker /var/lib/docker.old
# Create symlink
sudo ln -s /mnt/docker-data /var/lib/docker
# Start Docker kembali
sudo systemctl start containerd
sudo systemctl start docker
# Verifikasi
docker info | grep "Docker Root Dir"
2. Optimasi untuk SSD
# Edit daemon.json untuk SSD optimization
sudo nano /etc/docker/daemon.json
Tambahkan:
{
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
3. Clean Up Docker Resources
# Hapus containers yang sudah stopped
docker container prune -f
# Hapus images yang tidak terpakai
docker image prune -a -f
# Hapus volumes yang tidak terpakai
docker volume prune -f
# Hapus networks yang tidak terpakai
docker network prune -f
# Hapus semua (build cache, containers, images, networks)
docker system prune -a -f --volumes
# Hapus spesifik resource lama
# Hapus images lebih dari 7 hari
docker image prune -a --filter "until=168h" -f
Docker Compose untuk Development
1. Contoh docker-compose.yml untuk Web Development
version: '3.8'
services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- db
networks:
- frontend
- backend
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d myapp"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
networks:
- backend
command: redis-server --appendonly yes
volumes:
postgres_data:
redis_data:
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true
2. Docker Compose Commands
# Start all services
docker compose up -d
# Build dan start
docker compose up --build -d
# Stop services
docker compose down
# Stop dan hapus volumes (hati-hati!)
docker compose down -v
# View logs
docker compose logs -f
# View logs service spesifik
docker compose logs -f web
# Scale service
docker compose up -d --scale web=3
# Execute command di container
docker compose exec db psql -U user -d myapp
# Restart service
docker compose restart web
# Update images dan restart
docker compose pull
docker compose up -d
Networking di Docker
1. Custom Bridge Network
# Buat custom network
docker network create --driver bridge myapp-network
# Run container dengan custom network
docker run -d --name web --network myapp-network nginx
# Connect container ke network
docker network connect myapp-network existing-container
# Inspect network
docker network inspect myapp-network
2. Expose Port dengan Range
# Expose port range (berguna untuk development)
docker run -d -p 8080-8090:8080-8090 myapp
3. Container-to-Container Communication
# Gunakan container name sebagai hostname
docker run -d --name database postgres
docker run -d --name webapp --link database:db myapp
# Di dalam webapp container, akses database via hostname "db"
Security Best Practices
1. Run Container sebagai Non-Root User
# Dockerfile example
FROM node:18-alpine
# Create non-root user
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
USER nodejs
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
2. Limit Container Resources
# Limit CPU dan Memory
docker run -d \
--memory="512m" \
--memory-swap="1g" \
--cpus="1.5" \
--name limited-app \
myapp
# Limit juga di docker-compose.yml
3. Read-Only Root Filesystem
# Run container dengan read-only root filesystem
docker run -d --read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=100m \
--tmpfs /var/cache:rw,noexec,nosuid,size=100m \
nginx
4. Scan Images untuk Vulnerabilities
# Install Trivy untuk scanning
sudo apt install -y trivy
# Scan image
trivy image myapp:latest
# Scan dengan severity filter
trivy image --severity HIGH,CRITICAL myapp:latest
Backup dan Restore Docker Data
1. Backup Container
# Export container ke tar
docker export -o myapp-backup.tar myapp-container
# Atau commit sebagai image baru
docker commit myapp-container myapp-backup:v1.0
# Save image ke tar
docker save -o myapp-image.tar myapp-backup:v1.0
2. Restore Container
# Import dari tar
cat myapp-backup.tar | docker import - myapp:restored
# Load image dari tar
docker load -i myapp-image.tar
# Run container dari image yang di-load
docker run -d myapp:restored
3. Backup Volumes
# Backup named volume
docker run --rm -v myapp_data:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data .
# Restore named volume
docker run --rm -v myapp_data:/data -v $(pwd):/backup alpine sh -c "cd /data && tar xzf /backup/backup.tar.gz"
Troubleshooting Docker
1. Permission Denied saat Run Docker
# Error: Got permission denied while trying to connect to Docker daemon
# Solusi: pastikan user dalam docker group
groups $USER
# Jika belum, tambahkan dan relogin
sudo usermod -aG docker $USER
newgrp docker
2. Container Tidak Bisa Akses Internet
# Check Docker network
docker network ls
docker network inspect bridge
# Restart Docker networking
sudo systemctl restart docker
# Atau flush iptables rules (hati-hati!)
sudo iptables -F
sudo iptables -X
sudo systemctl restart docker
3. Storage Driver Issues
# Check storage driver
docker info | grep "Storage Driver"
# Jika menggunakan vfs (slow), switch ke overlay2
# Pastikan kernel support overlay2
sudo modprobe overlay
# Edit daemon.json untuk force storage driver
{
"storage-driver": "overlay2"
}
4. High Disk Usage
# Analisis disk usage
docker system df
# Hapus resources tidak terpakai
docker system prune -a
# Limit log size di daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Kesimpulan
Docker di Debian 12 Bookworm berjalan sangat baik dengan repository official yang memberikan versi terbaru. Dengan konfigurasi yang tepat:
- Docker Engine berjalan optimal dengan overlay2 storage driver
- Security terjaga dengan user permissions dan rootless mode
- Resource management efisien dengan limits dan cleanup routines
- Development workflow streamlined dengan Docker Compose
- Production ready dengan proper networking dan security settings
Untuk development modern, Docker adalah tool yang hampir wajib dimiliki. Dengan mengikuti panduan ini, Anda memiliki setup Docker yang robust dan secure di Debian 12.
Jangan lupa untuk secara berkala update Docker dengan sudo apt update && sudo apt upgrade dan monitor resource usage untuk menjaga performa sistem tetap optimal.
Artikel Terkait
Link Postingan: https://www.tirinfo.com/cara-install-konfigurasi-docker-debian-12/