Professional IT Partner
Digital Knowledge Base

Tutorial Lengkap Manajemen Docker: Instalasi, Perintah Dasar, Troubleshooting

I
IT Musafir
23 Feb 2026, 20:03
70 Views
11 Menit Baca
2,086 Kata
Tutorial Lengkap Manajemen Docker: Instalasi, Perintah Dasar, Troubleshooting
Teknologi, Docker, Tutorial, Troubleshooting
11 Menit
2,086 Kata
## Pengenalan Docker adalah platform containerisasi yang memungkinkan developer untuk mengemas aplikasi dan dependensinya ke dalam container. Panduan ini mencakup instalasi, penggunaan dasar, dan troubleshooting untuk Docker pada sistem Linux. ### Konsep Kunci - **Container**: Paket eksekusi yang ringan dan mandiri yang mencakup semua yang dibutuhkan untuk menjalankan aplikasi - **Image**: Template read-only yang digunakan untuk membuat container - **Dockerfile**: File teks dengan instruksi untuk membangun Docker image - **Registry**: Sistem penyimpanan untuk Docker images (Docker Hub, registry pribadi) --- ## Instalasi ### Prasyarat ```bash # Update paket sistem sudo apt update && sudo apt upgrade -y # Ubuntu/Debian sudo dnf update -y # CentOS/RHEL/Fedora # Install paket yang diperlukan sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release # Ubuntu/Debian sudo dnf install -y curl dnf-plugins-core # CentOS/RHEL/Fedora ``` ### Instalasi Docker pada Ubuntu/Debian ```bash # Tambahkan GPG key resmi Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # Siapkan repository stabil echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.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 -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` ### Instalasi Docker pada CentOS/RHEL/Fedora ```bash # Tambahkan GPG key resmi Docker sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo # Install Docker Engine sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` ### Setup Pasca-Instalasi ```bash # Start dan enable layanan Docker sudo systemctl start docker sudo systemctl enable docker # Tambahkan user saat ini ke grup docker (opsional, untuk menjalankan docker tanpa sudo) sudo usermod -aG docker $USER # Verifikasi instalasi docker --version docker run hello-world ``` ### Verifikasi Instalasi ```bash # Periksa status layanan Docker sudo systemctl status docker # Periksa info Docker docker info # Test dengan container sederhana docker run --rm alpine echo "Docker berfungsi!" ``` --- ## Perintah Dasar Docker ### Manajemen Image ```bash # Cari image docker search nginx # Pull image docker pull nginx:latest # Daftar image lokal docker images docker image ls # Hapus image docker rmi nginx:latest docker image rm nginx:latest # Hapus semua image yang tidak digunakan docker image prune -a ``` ### Siklus Hidup Container ```bash # Jalankan container docker run -d --name web-server -p 8080:80 nginx # Daftar container yang berjalan docker ps # Daftar semua container (termasuk yang berhenti) docker ps -a # Hentikan container docker stop web-server # Jalankan container yang berhenti docker start web-server # Restart container docker restart web-server # Hapus container docker rm web-server # Hapus semua container yang berhenti docker container prune ``` ### Interaksi Container ```bash # Lihat log container docker logs web-server docker logs -f web-server # Ikuti log # Eksekusi perintah dalam container yang berjalan docker exec -it web-server /bin/bash # Salin file ke/dari container docker cp local-file.txt web-server:/path/in/container/ docker cp web-server:/path/in/container/file.txt local-file.txt # Lihat detail container docker inspect web-server ``` --- ## Manajemen Container ### Menjalankan Container dengan Opsi ```bash # Container dasar dengan port mapping docker run -d --name my-app -p 3000:3000 node:18 # Container dengan volume mounting docker run -d --name data-container -v /host/path:/container/path nginx # Container dengan variabel lingkungan docker run -d --name db -e MYSQL_ROOT_PASSWORD=password mysql:8.0 # Container dengan batasan sumber daya docker run -d --name limited-app --memory="512m" --cpus="1.0" nginx # Container dengan kebijakan restart docker run -d --name always-up --restart unless-stopped nginx # Mode detached dengan penghapusan otomatis docker run --rm -d --name temp-container nginx ``` ### Pemantauan Container ```bash # Lihat penggunaan sumber daya container docker stats # Lihat informasi detail container docker inspect container-name # Lihat proses container docker top container-name # Lihat pemetaan port container docker port container-name ``` --- ## Docker Images ### Membangun Image Kustom ```dockerfile # Contoh Dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"] ``` ```bash # Build image docker build -t my-app:1.0 . # Build dengan Dockerfile di direktori berbeda docker build -t my-app:1.0 -f /path/to/Dockerfile /path/to/context # Build dengan argumen build docker build --build-arg NODE_ENV=production -t my-app:prod . ``` ### Optimasi Image ```dockerfile # Contoh multi-stage build FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM node:18-alpine AS production WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules EXPOSE 3000 CMD ["node", "dist/app.js"] ``` ### Manajemen Image ```bash # Tag image docker tag my-app:1.0 my-registry/my-app:1.0 # Push ke registry docker push my-registry/my-app:1.0 # Pull dari registry docker pull my-registry/my-app:1.0 # Lihat riwayat image docker history my-app:1.0 # Export/import image docker save -o my-app.tar my-app:1.0 docker load -i my-app.tar ``` --- ## Docker Volumes ### Jenis Volume ```bash # Named volume (dikelola oleh Docker) docker run -d --name db -v db-data:/var/lib/mysql mysql:8.0 # Bind mount (direktori host) docker run -d --name web -v /host/www:/usr/share/nginx/html nginx # Anonymous volume docker run -d --name temp -v /data busybox ``` ### Manajemen Volume ```bash # Daftar volume docker volume ls # Buat volume docker volume create my-volume # Inspeksi volume docker volume inspect my-volume # Hapus volume docker volume rm my-volume # Hapus volume yang tidak digunakan docker volume prune ``` ### Backup dan Restore Volume ```bash # Backup volume docker run --rm -v my-volume:/data -v $(pwd):/backup alpine tar czf /backup/my-volume-backup.tar.gz -C /data . # Restore volume docker run --rm -v my-volume:/data -v $(pwd):/backup alpine tar xzf /backup/my-volume-backup.tar.gz -C /data ``` --- ## Docker Networks ### Jenis Network ```bash # Bridge network (default) docker network create my-bridge-network # Host network docker run --network=host nginx # None network docker run --network=none busybox # Overlay network (untuk Swarm) docker network create --driver overlay my-overlay-network ``` ### Manajemen Network ```bash # Daftar network docker network ls # Buat network docker network create --driver bridge my-network # Hubungkan container ke network docker network connect my-network container-name # Putuskan container dari network docker network disconnect my-network container-name # Inspeksi network docker network inspect my-network # Hapus network docker network rm my-network ``` ### Networking Lanjutan ```bash # Network dengan subnet kustom docker network create --subnet=192.168.0.0/16 my-custom-network # Network dengan IP alias docker run --network my-custom-network --ip 192.168.0.10 nginx # Port mapping dengan IP spesifik docker run -p 192.168.1.100:8080:80 nginx ``` --- ## Docker Compose ### Instalasi Docker Compose ```bash # Docker Compose v2 (termasuk dengan Docker Desktop) # Untuk instalasi manual di Linux: sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` ### Contoh File Docker Compose ```yaml # docker-compose.yml version: '3.8' services: web: image: nginx:alpine ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html networks: - app-network depends_on: - db db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: myapp volumes: - db-data:/var/lib/mysql networks: - app-network app: build: . ports: - "3000:3000" environment: - NODE_ENV=production networks: - app-network depends_on: - db volumes: db-data: networks: app-network: driver: bridge ``` ### Perintah Docker Compose ```bash # Start layanan docker-compose up -d # Stop layanan docker-compose down # Lihat log docker-compose logs -f # Scale layanan docker-compose up -d --scale web=3 # Rebuild layanan docker-compose up -d --build # Eksekusi perintah dalam layanan docker-compose exec web /bin/bash # Lihat penggunaan sumber daya docker-compose top # Pull image docker-compose pull # Hapus container yang berhenti docker-compose rm ``` --- ## Troubleshooting ### Masalah Umum dan Solusi #### 1. Docker Daemon Tidak Berjalan ```bash # Error: Cannot connect to the Docker daemon sudo systemctl start docker sudo systemctl enable docker # Periksa status sudo systemctl status docker # Periksa log sudo journalctl -u docker.service ``` #### 2. Masalah Izin Akses Ditolak ```bash # Error: permission denied while trying to connect to Docker daemon # Tambahkan user ke grup docker sudo usermod -aG docker $USER # Logout dan login kembali, atau gunakan: newgrp docker # Alternatif: Jalankan dengan sudo sudo docker ps ``` #### 3. Port Sudah Digunakan ```bash # Error: port is already allocated # Cari proses yang menggunakan port sudo netstat -tulpn | grep :8080 sudo lsof -i :8080 # Hentikan proses sudo kill -9 # Atau gunakan port berbeda docker run -p 8081:80 nginx ``` #### 4. Container Tidak Mau Start ```bash # Periksa log container docker logs container-name # Periksa status container docker ps -a # Inspeksi container untuk error docker inspect container-name # Jalankan dalam mode interaktif untuk debugging docker run -it --entrypoint /bin/bash image-name ``` #### 5. Kehabisan Ruang Disk ```bash # Periksa penggunaan disk Docker docker system df # Bersihkan sumber daya yang tidak digunakan docker system prune -a # Bersihkan volume (hati-hati!) docker volume prune # Bersihkan build cache docker builder prune -a ``` #### 6. Masalah Jaringan ```bash # Periksa konektivitas jaringan docker exec container-name ping google.com # Periksa resolusi DNS docker exec container-name nslookup google.com # Reset jaringan Docker docker network prune # Restart Docker daemon sudo systemctl restart docker ``` #### 7. Masalah Volume Mount ```bash # Periksa volume mounts docker inspect container-name | grep Mounts # Verifikasi direktori host ada ls -la /host/path # Periksa izin ls -ld /host/path # Perbaiki izin sudo chown -R $USER:$USER /host/path ``` #### 8. Masalah Pull Image ```bash # Periksa konektivitas jaringan ping registry-1.docker.io # Bersihkan cache Docker docker system prune -a # Restart Docker daemon sudo systemctl restart docker # Periksa DNS nslookup registry-1.docker.io # Gunakan registry mirror yang berbeda sudo systemctl edit docker # Tambahkan: # [Service] # ExecStart= # ExecStart=/usr/bin/dockerd --registry-mirror=https://mirror.gcr.io ``` #### 9. Masalah Sumber Daya Container ```bash # Periksa penggunaan sumber daya container docker stats # Lihat batasan container docker inspect container-name | grep -i memory # Tingkatkan batasan memori docker run --memory="2g" nginx # Periksa sumber daya sistem free -h df -h ``` #### 10. Masalah Docker Build ```bash # Bersihkan build cache docker builder prune -a # Periksa build context docker build --no-cache . # Debug proses build docker build --progress=plain . # Periksa sintaks Dockerfile docker build --dry-run . ``` ### Perintah Debugging ```bash # Informasi sistem docker info docker version # Debugging container docker inspect container-name docker logs container-name docker exec -it container-name /bin/bash # Debugging jaringan docker network inspect network-name docker exec container-name ip addr docker exec container-name route # Debugging volume docker volume inspect volume-name docker exec container-name ls -la /mount/point # Pemantauan performa docker stats --no-stream docker system df ``` ### Analisis Log ```bash # Log Docker daemon sudo journalctl -u docker.service -f # Log container dengan timestamp docker logs -t container-name # Ikuti log dengan filter docker logs -f container-name | grep ERROR # Export log docker logs container-name > container.log ``` --- ## Praktik Terbaik ### Praktik Keamanan ```bash # Gunakan non-root user dalam container RUN addgroup -g 1001 -S appuser && \ adduser -u 1001 -S appuser USER appuser # Gunakan versi image spesifik FROM node:18.17.0-alpine # Pindai image untuk kerentanan docker scan my-app:1.0 # Gunakan .dockerignore untuk mengecualikan file sensitif echo "node_modules" > .dockerignore echo ".git" >> .dockerignore echo "*.secret" >> .dockerignore ``` ### Optimasi Performa ```bash # Gunakan multi-stage builds FROM node:18-alpine AS builder # ... langkah build FROM node:18-alpine AS production COPY --from=builder /app/dist ./dist # Gunakan .dockerignore untuk mengurangi build context echo "node_modules" > .dockerignore echo "*.log" >> .dockerignore # Minimalkan jumlah layer RUN apt-get update && apt-get install -y \ curl \ wget \ && rm -rf /var/lib/apt/lists/* ``` ### Manajemen Sumber Daya ```bash # Tetapkan batasan memori docker run --memory="512m" --memory-swap="1g" nginx # Tetapkan batasan CPU docker run --cpus="1.5" nginx # Tetapkan kebijakan restart docker run --restart=unless-stopped nginx # Gunakan health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/ || exit 1 ``` ### Pemantauan dan Logging ```bash # Gunakan structured logging docker run --log-driver=json-file --log-opt max-size=10m nginx # Pantau kesehatan container docker ps --format "table {{.Names}}\t{{.Status}}" # Siapkan rotasi log docker run --log-opt max-size=10m --log-opt max-file=3 nginx ``` ### Backup dan Pemulihan ```bash # Backup container docker export container-name > container-backup.tar # Backup image docker save -o images-backup.tar image1 image2 # Backup volume docker run --rm -v volume-name:/data -v $(pwd):/backup alpine tar czf /backup/volume-backup.tar.gz -C /data . ``` --- ## Referensi Cepat ### Perintah Esensial ```bash # Images docker pull # Pull image docker build -t . # Build image docker images # Daftar image docker rmi # Hapus image # Containers docker run # Jalankan container docker ps # Daftar container yang berjalan docker ps -a # Daftar semua container docker stop # Hentikan container docker rm # Hapus container docker logs # Lihat log # Volumes docker volume ls # Daftar volume docker volume create # Buat volume docker volume rm # Hapus volume # Networks docker network ls # Daftar network docker network create # Buat network docker network rm # Hapus network # System docker system df # Tampilkan penggunaan disk docker system prune -a # Bersihkan sistem docker info # Informasi sistem ``` ### Opsi Umum ```bash -d # Mode detached -i # Mode interaktif -t # Alokasikan TTY -p : # Port mapping -v : # Volume mount -e = # Variabel lingkungan --name # Nama container --restart # Kebijakan restart --memory= # Batasan memori --cpus= # Batasan CPU ``` --- ## Kesimpulan Panduan ini memberikan gambaran komprehensif tentang instalasi, manajemen, dan troubleshooting Docker. Untuk topik yang lebih lanjut dan kasus penggunaan spesifik, rujuk ke dokumentasi resmi Docker di https://docs.docker.com/. Ingat untuk selalu menguji konfigurasi Docker di lingkungan pengembangan sebelum mengdeploy ke produksi, dan ikuti praktik keamanan terbaik untuk memastikan keamanan container.

Review Pembaca

Beri penilaian dan komentar untuk artikel ini.

4.5 (10 review)
Dewi Lestari
25 Feb 2026

Tips yang diberikan benar-benar kepakai.

Arif Hidayat
25 Feb 2026

Artikelnya sangat membantu dan mudah dipahami.

Siti Rahma
25 Feb 2026

Bahasanya ringan tapi tetap mendalam.

Fajar Nugroho
24 Feb 2026

Sangat informatif, terima kasih sudah berbagi.

Ahmad Fauzi
24 Feb 2026

Sangat informatif, terima kasih sudah berbagi.