🐳 Docker
Docker adalah platform untuk menjalankan aplikasi dalam container terisolasi. Lembar pintasan ini berisi perintah untuk bekerja dengan image, container, jaringan, volume, serta Docker Compose dan Swarm.
📦 Perintah Dasar
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker | Perintah utama CLI Docker yang digunakan untuk menjalankan subperintah dan mengelola container, image, jaringan, dan volume | |
| docker version | Tampilkan versi Docker yang terinstal (klien dan server). Berguna untuk verifikasi instalasi | |
| docker version --format '{{.Client.APIVersion}}' | Tampilkan hanya versi API klien Docker | |
| docker version --format '{{.Server.Version}}' | Tampilkan hanya versi server (Engine) Docker | |
| docker version --format '{{json .}}' | Keluarkan info versi lengkap dalam format JSON | |
| docker system info | Tampilkan informasi umum sistem Docker: jumlah container, image, sumber daya | |
| docker info | Tampilkan data Docker: versi, jaringan, jumlah container dan image | |
| docker info --format '{{json .}}' | Keluarkan info dalam format JSON — berguna untuk otomatisasi | |
| docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' | Tampilkan jumlah CPU dan total memori | |
| docker info --format '{{.Driver}}' | Tampilkan driver penyimpanan yang digunakan Docker | |
| docker image pull | Unduh image dari Docker Hub atau registry lain. Container tidak dapat berjalan tanpa image | |
| docker pull ubuntu | Unduh image Ubuntu terbaru | |
| docker pull nginx:alpine | Unduh image Nginx ringan berbasis Alpine Linux | |
| docker pull redis:7 | Unduh image Redis versi 7 | |
| docker container run | Buat dan jalankan container baru dari sebuah image | |
| docker run -it ubuntu bash | Jalankan Ubuntu dengan terminal Bash interaktif | |
| docker run -d nginx | Jalankan Nginx dalam mode detached (latar belakang) | |
| docker run -p 8080:80 nginx | Jalankan Nginx dan ikat port 80 container ke port 8080 host | |
| docker container ls | Daftar container yang berjalan | |
| docker ps | Tampilkan hanya container yang sedang berjalan | |
| docker ps -a | Tampilkan semua container, termasuk yang berhenti | |
| docker ps --format '{{.Names}}' | Keluarkan hanya nama container | |
| docker container start | Mulai satu atau lebih container yang berhenti | |
| docker start container_name | Mulai container berdasarkan nama | |
| docker start $(docker ps -aq) | Mulai semua container | |
| docker start -ai container_name | Mulai container dan lampirkan terminal interaktif | |
| docker container stop | Hentikan container yang berjalan | |
| docker stop container_name | Hentikan container berdasarkan nama | |
| docker stop $(docker ps -q) | Hentikan semua container yang berjalan | |
| docker stop -t 5 container_name | Hentikan container dengan memberi waktu 5 detik untuk menyelesaikan proses | |
| docker container restart | Restart container | |
| docker restart container_name | Restart container tertentu | |
| docker restart $(docker ps -q) | Restart semua container yang berjalan | |
| docker restart -t 10 container_name | Restart container dengan jeda 10 detik | |
| docker container rm | Hapus container | |
| docker rm container_name | Hapus container tertentu yang sudah berhenti | |
| docker rm $(docker ps -aq) | Hapus semua container yang sudah berhenti | |
| docker rm -f container_name | Paksa hapus container yang sedang berjalan | |
| docker image ls | Daftar image yang sudah diunduh | |
| docker images | Tampilkan semua image di host | |
| docker images -a | Tampilkan semua image, termasuk lapisan perantara | |
| docker images --format '{{.Repository}}:{{.Tag}}' | Keluarkan hanya nama dan tag image | |
| docker image rm | Hapus satu atau lebih image dari penyimpanan lokal | |
| docker rmi test1:latest | Hapus image dengan tag  | |
| docker rmi 1a2b3c4d5e6f | Hapus image berdasarkan ID | |
| docker rmi $(docker images -q) | Hapus semua image (gunakan dengan hati-hati!) | 
🔁 Manajemen Container
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker container exec | Jalankan perintah di dalam container yang sedang berjalan | |
| docker exec -it container bash | Luncurkan shell bash interaktif di dalam container bernama  | |
| docker exec container ls /app | Jalankan perintah  | |
| docker exec -d container touch /tmp/testfile | Jalankan perintah di container dalam mode detached (tanpa menunggu) | |
| docker container logs | Lihat log container | |
| docker logs container | Tampilkan semua log dari container  | |
| docker logs -f container | Ikuti log container secara real-time | |
| docker logs --tail 50 container | Tampilkan 50 baris log terakhir | |
| docker inspect | Ambil informasi JSON terperinci tentang container atau image | |
| docker inspect container | Tampilkan detail container  | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' container | Tampilkan alamat IP container | |
| docker container stats | Tampilkan statistik penggunaan sumber daya container secara real-time | |
| docker stats | Tampilkan CPU, memori, jaringan, dan penggunaan disk untuk semua container | |
| docker stats container_name | Tampilkan statistik hanya untuk container tertentu | |
| docker stats --no-stream | Tampilkan snapshot statistik sekali lalu keluar | |
| docker container rename | Ganti nama container | |
| docker rename old_name new_name | Ganti nama container dari  | |
| docker container cp | Salin file antara container dan host | |
| docker cp container:/src/file.txt ./file.txt | Salin file dari container ke direktori host saat ini | |
| docker cp ./config.yaml container:/app/config.yaml | Salin file dari host ke container | |
| docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" | Streaming file log dari container dan filter baris “ERROR” tanpa menyimpan ke disk | |
| docker container top | Tampilkan proses yang berjalan di dalam container | |
| docker top container | Tampilkan proses dari container bernama  | |
| docker container pause | Jeda semua proses dalam container | |
| docker pause container | Jeda container  | |
| docker container unpause | Lanjutkan container yang dijeda | |
| docker unpause container | Lanjutkan container  | |
| docker container update | Perbarui pengaturan container tanpa restart | |
| docker update --memory 500m container | Batasi penggunaan memori container hingga 500 MB | 
🧱 Image dan Dockerfile
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker buildx build | Bangun image Docker dari Dockerfile | |
| docker build -t my_image . | Bangun image dengan tag  | |
| docker build -t my_image:1.0 . | Bangun image dengan tag versi  | |
| docker build --no-cache -t my_image . | Bangun image tanpa menggunakan cache untuk build bersih | |
| docker container commit | Buat image dari keadaan container saat ini | |
| docker commit container my_img:v1 | Buat image  | |
| docker commit -m "Added config" container my_img:v2 | Buat image dengan pesan commit | |
| docker commit -a "John Doe" container my_img:latest | Buat image dengan menyertakan penulis | |
| docker image tag | Tambahkan atau ubah tag image | |
| docker tag my_image myrepo/my_image:latest | Tambahkan tag untuk push ke registry  | |
| docker tag my_image:1.0 my_image:stable | Buat tag  | |
| docker tag my_image my_image:backup | Tambahkan tag  | |
| docker image push | Push image ke Docker Hub atau registry lain | |
| docker push myrepo/my_image:latest | Push image bertag  | |
| docker push myrepo/my_image:1.0 | Push image bertag  | |
| docker push myrepo/my_image | Push image dengan tag default  | |
| docker login | Autentikasi ke Docker Hub atau registry lain | |
| docker login | Masukkan username dan password secara interaktif untuk Docker Hub | |
| docker login myregistry.local:5000 | Login ke registry privat | |
| docker login -u username -p password | Login dengan username dan password (tidak disarankan) | |
| docker logout | Logout dari Docker Hub atau registry lain | |
| docker logout | Logout dari Docker Hub | |
| docker logout myregistry.local:5000 | Logout dari registry privat | |
| HEALTHCHECK | Instruksi Dockerfile untuk otomatis memeriksa status kesehatan container | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 | Tambahkan health check untuk memverifikasi ketersediaan layanan setiap 30 detik | |
| docker inspect --format='{{json .State.Health}}' container_name | Periksa status healthcheck dari container yang sedang berjalan | 
🔌 Jaringan dan Volume
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker network ls | Daftar semua jaringan Docker | |
| docker network ls | Tampilkan semua jaringan Docker yang dibuat | |
| docker network ls --filter driver=bridge | Tampilkan hanya jaringan dengan driver  | |
| docker network ls --format '{{.Name}}' | Tampilkan hanya nama jaringan | |
| docker network create | Buat jaringan Docker baru | |
| docker network create my_net | Buat jaringan bernama  | |
| docker network create --driver bridge my_bridge_net | Buat jaringan dengan driver  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | Buat jaringan dengan subnet tertentu | |
| docker network connect | Hubungkan container ke jaringan | |
| docker network connect my_net container | Hubungkan container bernama  | |
| docker network connect --alias db_net my_net container | Hubungkan dengan alias  | |
| docker network disconnect | Putuskan container dari jaringan | |
| docker network disconnect my_net container | Putuskan container  | |
| docker volume ls | Daftar semua volume Docker | |
| docker volume ls | Tampilkan semua volume Docker | |
| docker volume ls --filter dangling=true | Tampilkan volume yang tidak digunakan | |
| docker volume create | Buat volume Docker baru | |
| docker volume create my_vol | Buat volume bernama  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | Buat volume sementara menggunakan tmpfs | |
| docker volume inspect | Tampilkan informasi terperinci tentang volume | |
| docker volume inspect my_vol | Tampilkan detail volume  | |
| docker volume rm | Hapus satu atau lebih volume | |
| docker volume rm my_vol | Hapus volume bernama  | |
| docker volume rm $(docker volume ls -qf dangling=true) | Hapus semua volume yang tidak digunakan | 
🧩 Plugin Docker
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker plugin ls | Daftar plugin Docker yang terpasang | |
| docker plugin ls | Tampilkan semua plugin dan statusnya | |
| docker plugin install | Instal plugin Docker dari registry | |
| docker plugin install vieux/sshfs | Instal plugin volume SSHFS | |
| docker plugin install store/weaveworks/net-plugin:latest_release | Instal plugin jaringan Weave | |
| docker plugin disable | Nonaktifkan plugin yang terpasang | |
| docker plugin disable vieux/sshfs | Nonaktifkan plugin SSHFS | |
| docker plugin enable | Aktifkan plugin yang sebelumnya dinonaktifkan | |
| docker plugin enable vieux/sshfs | Aktifkan plugin SSHFS | |
| docker plugin rm | Hapus plugin Docker | |
| docker plugin rm vieux/sshfs | Hapus plugin SSHFS | 
📋 Docker Compose
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker compose up | Mulai container yang didefinisikan di docker-compose.yml | |
| docker compose up | Mulai semua service di direktori saat ini dalam mode interaktif | |
| docker compose up -d | Mulai service dalam mode detached (latar belakang) | |
| docker compose up --build | Bangun image sebelum memulai service | |
| docker compose down | Hentikan dan hapus container, jaringan, dan volume yang dibuat oleh up | |
| docker compose down | Hentikan semua service yang berjalan dan hapus resource terkait | |
| docker compose down --volumes | Hapus juga volume yang dibuat oleh Compose | |
| docker compose down --rmi all | Hapus juga image yang dibuat oleh Compose | |
| docker compose logs | Lihat log dari semua service atau service tertentu | |
| docker compose logs | Tampilkan log semua service | |
| docker compose logs -f | Ikuti log secara real-time | |
| docker compose logs web | Tampilkan log hanya untuk service  | |
| docker compose exec | Jalankan perintah di dalam container service yang sedang berjalan | |
| docker compose exec web bash | Masuk ke shell bash interaktif di dalam container service  | |
| docker compose exec db ls /var/lib/postgresql | Jalankan perintah  | |
| docker compose exec -d worker touch /tmp/done | Jalankan perintah di dalam container  | |
| docker compose build | Bangun atau bangun ulang image service | |
| docker compose build | Bangun semua image yang didefinisikan di  | |
| docker compose build web | Bangun hanya image service  | |
| docker compose build --no-cache | Bangun image tanpa menggunakan cache | |
| docker compose ps | Tampilkan status semua service dan container | |
| docker compose ps -a | Tampilkan semua container, termasuk yang berhenti | |
| docker compose ps --services | Tampilkan hanya nama service | |
| docker compose pull | Unduh/perbarui image service dari registry | |
| docker compose pull web | Pull image hanya untuk service  | |
| docker compose pull --ignore-pull-failures | Lanjutkan pull meskipun beberapa image gagal | |
| docker compose restart | Restart semua service atau service tertentu | |
| docker compose restart db | Restart hanya service  | |
| docker compose restart -t 10 | Restart service dengan timeout 10 detik | |
| docker compose config | Tampilkan konfigurasi Compose final dalam format YAML | |
| docker compose config --services | Daftar semua service dalam konfigurasi | |
| docker compose config --volumes | Daftar semua volume yang didefinisikan dalam konfigurasi | |
| docker compose start | Mulai service yang berhenti tanpa membuat ulang container | |
| docker compose start web | Mulai service  | |
| docker compose start db api | Mulai beberapa service sekaligus | |
| docker compose stop | Hentikan service tanpa menghapus container | |
| docker compose stop web | Hentikan service  | |
| docker compose stop -t 5 | Hentikan service dengan timeout 5 detik | 
📤 Ekspor dan Impor
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker image save | Simpan satu atau lebih image Docker ke arsip tar untuk impor atau transfer nanti | |
| docker save -o image.tar my_img:tag | Simpan image Docker ke file arsip tar | |
| docker save my_image > my_image.tar | Cara alternatif untuk menyimpan image ke file | |
| docker save -o redis_latest.tar redis:latest | Simpan image Redis tertentu ke file | |
| docker image load | Muat image Docker dari arsip tar yang disimpan sebelumnya | |
| docker load < image.tar | Muat image Docker dari file arsip tar | |
| docker load --input redis_latest.tar | Muat image dengan menentukan file melalui parameter | |
| docker load --quiet < my_image.tar | Muat image tanpa output progres | |
| docker container export | Ekspor filesystem container sebagai arsip tar tanpa riwayat atau metadata image | |
| docker export container > file.tar | Ekspor filesystem container ke arsip | |
| docker export my_container > my_container_fs.tar | Ekspor container berdasarkan nama | |
| docker export -o container_fs.tar container_id | Ekspor berdasarkan ID container menggunakan flag  | |
| docker image import | Buat image baru dari arsip tar filesystem | |
| docker import file.tar new_img | Impor file arsip sebagai image Docker baru | |
| docker import https://example.com/image.tar my_new_image | Impor image langsung dari URL | |
| docker import - my_image < file.tar | Impor dari input standar | 
🧹 Pembersihan dan Diagnostik
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker system df | Tampilkan penggunaan disk Docker: volume, image, container, dan cache build | |
| docker system df -v | Output terperinci dengan info pada setiap image, container, dan volume | |
| docker system df --format '{{json .}}' | Output informasi dalam format JSON | |
| docker system prune | Hapus semua data Docker yang tidak digunakan: container berhenti, jaringan tidak digunakan, image menggantung, dan cache build | |
| docker system prune -a | Hapus image tidak digunakan termasuk yang menggantung | |
| docker system prune --volumes | Hapus volume tidak digunakan bersama resource lain | |
| docker image prune | Hapus image Docker yang tidak digunakan termasuk lapisan menggantung | |
| docker image prune -a | Hapus semua image tidak digunakan termasuk yang menggantung | |
| docker image prune --filter "until=24h" | Hapus image yang lebih lama dari 24 jam | |
| docker container prune | Hapus container berhenti sesuai filter atau semua jika tidak ada filter | |
| docker container prune --filter "until=24h" | Hapus container berhenti yang lebih lama dari 24 jam | |
| docker container prune --force | Hapus tanpa konfirmasi | 
🐝 Docker Swarm
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker swarm init | Inisialisasi cluster Docker Swarm baru pada node saat ini | |
| docker swarm init --advertise-addr 192.168.1.100 | Inisialisasi cluster dengan menentukan alamat IP | |
| docker swarm init --listen-addr 0.0.0.0:2377 | Inisialisasi dengan port listen tertentu | |
| docker service create | Buat service baru di cluster Swarm | |
| docker service create --name nginx nginx | Buat service Nginx di Swarm | |
| docker service create --replicas 3 --name web webserver | Buat service dengan 3 replika | |
| docker service create --name redis --publish 6379:6379 redis | Buat service dengan mapping port | |
| docker stack deploy | Deploy stack service ke cluster Swarm berdasarkan file Compose | |
| docker stack deploy -c docker-compose.yml mystack | Deploy stack dari file compose | |
| docker stack deploy --with-registry-auth -c compose.yml mystack | Deploy dengan penerusan autentikasi registry | |
| docker stack deploy -c swarm-compose.yml mystack | Gunakan file compose alternatif untuk stack | |
| docker stack rm | Hapus satu atau lebih stack dari cluster Swarm | |
| docker stack rm mystack | Hapus stack  | |
| docker stack rm | Hapus semua stack (tidak disarankan) | |
| docker stack rm mystack && docker swarm leave --force | Hapus stack dan tinggalkan Swarm | 
💼 Penggunaan Docker Tingkat Lanjut
🚀 Perintah Docker Profesional
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker buildx | Alat build image canggih pengganti docker build. Mendukung multi-platform, caching, build paralel, dan ekspor ke berbagai format. Berguna untuk CI/CD dan pengembangan lintas platform | |
| docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . | Bangun image multi-platform (ARM dan x86 sekaligus) | |
| docker buildx build --load -t localimg . | Bangun image dan muat ke cache Docker Engine lokal | |
| docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . | Bangun dan push image multi-platform ke registry | |
| docker context | Kelola konteks Docker untuk bekerja dengan lingkungan remote atau multi. Memungkinkan beralih cepat antara Docker Engine lokal dan remote | |
| docker context create myremote --docker "host=ssh://user@host" | Buat konteks untuk menghubungkan ke host Docker remote | |
| docker context use myremote | Beralih ke konteks remote | |
| docker context ls | Daftar konteks yang tersedia dan yang aktif | |
| docker system events | Dengarkan event Docker secara real-time, dengan filter berdasarkan jenis event (misalnya, start container). Berguna untuk pemantauan dan otomatisasi | |
| docker events --filter 'event=start' | Tampilkan hanya event start container | |
| docker events --since 1h --until 10m | Tampilkan event dari 1 jam terakhir hingga 10 menit lalu | |
| docker events --filter 'type=network' | Tampilkan hanya event terkait jaringan | |
| docker events --filter 'image=nginx' | Tampilkan event terkait image  | |
| docker container update | Ubah batas sumber daya dan pengaturan container yang berjalan tanpa restart | |
| docker update --cpus 2 --memory 1g my_container | Atur batas 2 CPU dan 1 GB RAM | |
| docker update --restart unless-stopped my_container | Atur kebijakan auto-restart ke  | |
| docker update --pids-limit 200 my_container | Batasi jumlah proses hingga 200 | |
| docker container diff | Tampilkan perubahan filesystem dalam container dibandingkan image asli. Berguna untuk debugging dan audit | |
| docker diff my_container | Tampilkan semua perubahan filesystem dalam container | |
| docker diff my_container | grep '^A' | Tampilkan hanya file yang ditambahkan ( | |
| docker image history | Tampilkan riwayat lapisan image: perintah build, ukuran setiap lapisan, dan waktu pembuatan. Berguna untuk optimisasi dan audit | |
| docker history my_image | Tampilkan riwayat lapisan sebuah image | |
| docker history --no-trunc my_image | Tampilkan perintah build penuh tanpa pemotongan | |
| docker history --format "{{.CreatedBy}}: {{.Size}}" my_image | Keluarkan hanya perintah build dan ukuran lapisan | 
🛠 Praktik dan Otomatisasi Docker
- Meminimalkan ukuran image 
 Gunakan base image seperti- alpineatau- scratchuntuk ukuran minimal.
 Untuk menggabungkan lapisan, gunakan- --squashsaat build (memerlukan fitur eksperimental).
 Juga, hapus file sementara dan cache dalam satu lapisan:- RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
- Meminimalkan jumlah lapisan 
 Gabungkan perintah dalam satu- RUNuntuk mengurangi jumlah lapisan dan ukuran akhir image:- RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
- Optimalkan build Dockerfile 
 Gunakan multi-stage build agar hanya file yang diperlukan tersisa dalam image final.
 Salin dan instal dependensi terlebih dahulu, lalu salin kode — ini meningkatkan caching lapisan dan mempercepat rebuild.
- Pisahkan secret dan config 
 Jangan pernah menyimpan file- .env, API key, atau sertifikat privat di dalam image.
 Gunakan untuk konfigurasi:- docker secret(dalam Swarm)
 
- variabel lingkungan (-e VAR=valueatau.env)
 
- volume eksternal untuk config 
 
- Secret saat build (BuildKit) 
 Untuk pengiriman secret yang aman saat build, gunakan flag- --secret:- docker buildx build --secret id=mysecret,src=./secret.txt .- Dalam Dockerfile, secret tersedia di - /run/secrets/mysecret:- RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret- 🛡 Ini mencegah secret disimpan dalam lapisan image. 
- Docker Rootless 
 Menjalankan Docker tanpa hak root meningkatkan keamanan dan mengurangi risiko kompromi host.
 Untuk mengaktifkan:- dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATH- Periksa: - docker info | grep Rootless- ⚠ Beberapa fitur (misalnya, port forwarding <1024) tidak akan tersedia. 
- Pindai image untuk kerentanan 
 Gunakan alat bawaan:- docker scan my_image- Atau CLI baru: - docker scout cves my_image- Ini membantu mendeteksi kerentanan pada base image dan dependensi. 
- Pantau penggunaan sumber daya 
 Batasi container berdasarkan memori, CPU, dan jumlah proses:- docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage- Ini mencegah penggunaan sumber daya berlebihan. 
 Anda juga bisa membatasi I/O:- docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage- Berguna untuk container yang tidak boleh membebani subsistem disk. 
- Pembersihan otomatis 
 Secara rutin hapus image, container, volume, dan jaringan yang tidak digunakan:- docker system prune -af --volumes- ⚠ Hati-hati: perintah ini menghapus semua resource yang tidak digunakan. - Untuk pembersihan selektif gunakan: - docker image prune --filter "until=24h"
- Integrasi CI/CD 
 Gabungkan build, test, dan deploy ke GitHub Actions, GitLab CI, Jenkins pipeline.
 Contoh langkah GitHub Actions:- - run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}
- Logging dan monitoring 
 Lampirkan driver logging (- --log-driver) ke sistem terpusat: ELK, Loki, Splunk.
 Gunakan Prometheus + cAdvisor untuk metrik container.
- Deploy produksi 
 Pisahkan konfigurasi untuk development dan production menggunakan- docker-compose.override.yml.
 Untuk high availability dan scaling gunakan:- Docker Swarm
 
- Kubernetes 
 
- Docker Swarm
🐞 Debugging dan Profiling Container Docker
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker container exec | Menjalankan perintah di dalam container yang sedang berjalan, memberikan akses interaktif atau kemampuan menjalankan proses di lingkungan terisolasi container | |
| docker exec -it my_container bash | Mulai terminal interaktif (bash) di dalam container yang sedang berjalan | |
| docker exec -it my_container sh | Mulai shell minimal di dalam container (jika bash tidak tersedia) | |
| docker exec my_container ls /app | Jalankan perintah di dalam container tanpa mode interaktif | |
| docker container logs | Menampilkan log dari container tertentu, memungkinkan melihat output dan event terkait operasinya untuk diagnosis dan pemantauan | |
| docker logs -f --tail 100 my_container | Lihat 100 baris log terakhir dengan streaming real-time | |
| docker logs my_container | Tampilkan semua log yang tersedia dari container | |
| docker logs --since 1h my_container | Tampilkan log dari 1 jam terakhir | |
| docker inspect | Mengeluarkan informasi terperinci tentang objek Docker (container, image, jaringan, dll.) dalam format JSON, termasuk konfigurasi dan status | |
| docker inspect my_container | Dapatkan info JSON lengkap tentang container | |
| docker inspect --format '{{.State.Pid}}' my_container | Dapatkan PID dari proses utama container di host | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container | Tampilkan alamat IP container | |
| nsenter(withstrace) | Utilitas Linux untuk masuk ke namespace proses lain (di sini, container). Digunakan dengan straceuntuk melacak system call di dalam container untuk debugging | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 | Masuk ke namespace container dan lacak system call dari proses 1 | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash | Buka shell bash di dalam namespace container | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp | Lihat port terbuka di dalam container | |
| tcpdump(inside container) | Alat konsol untuk menangkap dan menganalisis lalu lintas jaringan. Digunakan di container untuk mendiagnosis masalah jaringan, menganalisis paket, dan memantau koneksi | |
| docker exec -it my_container tcpdump -i any | Tangkap dan analisis lalu lintas jaringan di dalam container | |
| docker exec -it my_container tcpdump -nn port 80 | Tangkap lalu lintas hanya pada port 80 | |
| docker exec -it my_container tcpdump -w /tmp/dump.pcap | Simpan lalu lintas ke file untuk analisis nanti | |
| docker container stats | Menampilkan metrik penggunaan sumber daya saat ini (CPU, memori, jaringan, disk) untuk satu atau beberapa container secara real-time | |
| docker stats my_container | Tampilkan penggunaan CPU, memori, jaringan, dan disk secara real-time oleh container | |
| docker stats | Tampilkan statistik untuk semua container | |
| docker stats --no-stream | Keluarkan statistik sekali lalu keluar | |
| docker container top | Menampilkan daftar proses yang berjalan di dalam container, mirip dengan psdi Linux, untuk menganalisis aktivitas container | |
| docker top my_container | Tampilkan proses yang berjalan di dalam container | |
| docker top my_container aux | Gunakan format output alternatif seperti  | |
| docker top my_container -eo pid,cmd | Tampilkan hanya PID dan command proses | |
| docker diff | Menampilkan perubahan pada filesystem container dibandingkan image dasarnya, menunjukkan file yang ditambahkan, diubah, atau dihapus | |
| docker diff my_container | Tampilkan perubahan filesystem dalam container dibandingkan image dasar | |
| docker diff my_container | grep '^A' | Tampilkan hanya file yang ditambahkan ( | |
| docker diff my_container | grep '^C' | Tampilkan hanya file yang diubah ( | |
| docker cp | Menyalin file dan direktori antara container dan host, memungkinkan pertukaran data dan backup | |
| — | — | — | 
| docker cp my_container:/path/to/file ./file | Salin file dari container ke host | |
| docker cp ./config.yaml my_container:/app/config.yaml | Salin file dari host ke container | |
| docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" | Salin file log dan filter baris error tanpa menyimpan ke disk | 
💡 Untuk debugging tingkat lanjut Anda dapat menggunakan
nsenter,strace,tcpdump,gdb, dan alat low-level lainnya.
💼 Penggunaan Docker Compose Tingkat Lanjut
🚀 Perintah Docker Compose Profesional
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker compose up | Memulai dan mengelola lifecycle service yang ditentukan dari file docker-compose.yml dengan kemampuan berjalan di latar belakang | |
| docker compose up -d web db | Jalankan hanya service  | |
| docker compose up --build | Bangun ulang image sebelum memulai service | |
| docker compose up --remove-orphans | Hapus container yang tidak didefinisikan dalam file compose saat ini | |
| docker compose build | Bangun image untuk service sesuai deskripsi di file compose dengan kontrol cache dan paralelisme | |
| docker compose build --no-cache | Bangun ulang image sepenuhnya tanpa menggunakan cache | |
| docker compose build --parallel | Bangun semua service secara bersamaan untuk mempercepat proses | |
| docker compose build web | Bangun image hanya untuk service  | |
| docker compose pull | Unduh versi terbaru image dari registry untuk semua service atau service tertentu | |
| docker compose pull | Pull image untuk semua service | |
| docker compose pull db | Pull image hanya untuk service  | |
| docker compose pull --ignore-pull-failures | Lanjutkan eksekusi dengan mengabaikan error saat pull image | |
| docker compose restart | Restart semua service atau service tertentu tanpa membuat ulang container | |
| docker compose restart | Restart semua service di proyek saat ini | |
| docker compose restart worker | Restart hanya service  | |
| docker compose restart web db | Restart beberapa service sekaligus | |
| docker compose exec | Jalankan perintah di dalam container service yang sedang berjalan dengan mode interaktif opsional | |
| docker compose exec db psql -U user -d database | Jalankan psql di dalam container service  | |
| docker compose exec web sh | Buka shell di dalam container  | |
| docker compose exec api curl http://localhost:8080 | Eksekusi permintaan curl dari container service  | |
| docker compose config | Keluarkan konfigurasi Compose final dengan mempertimbangkan semua file dan variabel lingkungan | |
| docker compose config | Tampilkan konfigurasi gabungan dalam format YAML | |
| docker compose config --services | Daftar semua service | |
| docker compose config --environment | Tampilkan semua variabel lingkungan yang digunakan oleh service | |
| docker compose watch | Secara otomatis restart service saat file sumber berubah, berguna untuk pengembangan | |
| docker compose watch | Mulai memantau file dan restart service saat ada perubahan | |
| docker compose events | Stream event Compose: service start, stop, update | |
| docker compose events --json | Terima event dalam format JSON | |
| docker compose rm | Hapus container service yang berhenti | |
| docker compose rm web db | Hapus container dari service  | |
| docker compose pause | Jeda operasi service | |
| docker compose pause api | Jeda service  | |
| docker compose unpause | Lanjutkan service yang dijeda | |
| docker compose unpause api | Lanjutkan service  | |
| docker compose create | Buat container tanpa menjalankannya | |
| docker compose create web db | Buat container untuk service  | |
| docker compose images | Tampilkan daftar image yang digunakan oleh service | |
| docker compose images | Tampilkan image semua service | |
| docker compose top | Tampilkan proses yang berjalan di dalam container service | |
| docker compose top web | Tampilkan proses di dalam container service  | 
🛠 Praktik dan Otomatisasi Berguna dengan Docker Compose
- Pemisahan Lingkungan 
 Gunakan file- docker-compose.override.ymlterpisah untuk lingkungan berbeda —- development,- staging,- production. Ini membantu mengisolasi konfigurasi dan menghindari konflik antar pengaturan.
 Anda juga bisa menggabungkan beberapa file konfigurasi menggunakan flag- -f:- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- Gunakan file - .envberbeda (- .env.dev,- .env.prod, dll.) untuk mengelola variabel lingkungan.
- Penyimpanan Secret yang Aman 
 Jangan masukkan data sensitif (password, token) langsung di file Compose. Sebagai gantinya gunakan:- file .envuntuk variabel lingkungan (perlu diingat file.envtidak terenkripsi dan tidak boleh di-commit ke repo publik)
 
- docker secretdan- docker configuntuk manajemen secret dan konfigurasi yang aman di Docker Swarm
 
- volume eksternal untuk file konfigurasi yang berisi secret
 
- sistem manajemen secret eksternal (misalnya HashiCorp Vault, AWS Secrets Manager) 
 
- file 
- Urutan Startup dengan - depends_ondan- healthcheck
 Agar service menunggu dependensi siap:- services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthy
- Minimalkan Downtime Saat Update 
 Sebelum memperbarui service, jalankan:- docker compose pull && docker compose up -d --remove-orphans- Opsi - -dmenjalankan container di latar belakang, dan- --remove-orphansmenghapus container yang tidak didefinisikan di konfigurasi saat ini.
 Untuk sepenuhnya menghentikan dan menghapus container lama jika diperlukan:- docker compose down --remove-orphans- Ini memastikan image baru dimuat dan container yang tidak digunakan dihapus tanpa downtime. 
- Hot Code Reloading untuk Pengembangan 
 Gunakan- volumesuntuk me-mount direktori lokal ke dalam container. Ini memungkinkan perubahan kode langsung berlaku tanpa rebuild image.
 Perhatikan masalah izin file dan caching filesystem, terutama di Windows dan macOS, untuk menghindari masalah performa.
- Hot Code Reloading Tanpa Volume (Compose 2.22+) - develop: watch: - path: ./src action: sync target: /app
- Logging Terpusat untuk Service 
 Arahkan log container ke sistem monitoring dan agregasi log seperti ELK Stack, Loki, Prometheus, dan Fluentd untuk analisis dan alerting mudah.
 Gunakan driver logging Docker (- --log-driver) untuk mengaktifkan pengumpulan log terpusat.
 Konfigurasikan driver logging untuk container di Compose:- services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- Restart Otomatis Service 
 Konfigurasikan kebijakan restart di- docker-compose.yml:- restart: unless-stopped- Kebijakan restart lainnya termasuk: - no— tidak ada restart otomatis (default)
 
- always— selalu restart container
 
- on-failure— restart hanya saat gagal (opsional dengan jumlah percobaan)
 - Di produksi, - unless-stoppedadalah pilihan optimal untuk memastikan ketahanan service.
 Ini memungkinkan pemulihan otomatis service setelah kegagalan atau reboot host.
- Profil Service 
 Memungkinkan menjalankan hanya grup service tertentu:- services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]- Untuk menjalankan hanya profil frontend: - docker compose --profile frontend up
🐞 Debugging dan Profiling Service di Docker Compose
| Perintah | Contoh | Deskripsi | 
|---|---|---|
| docker compose exec | Jalankan perintah di dalam service yang sedang berjalan, memberikan akses ke container atau menjalankan proses individual | |
| docker compose exec web sh | Buka shell di dalam container service  | |
| docker compose exec db psql -U user -d database | Jalankan perintah psql di dalam container service  | |
| docker compose logs | Lihat log service untuk diagnosis dan pemantauan | |
| docker compose logs -f db | Lihat log service  | |
| docker compose logs --tail=50 api | Tampilkan 50 baris log terakhir dari service  | |
| docker compose logs --since=1h web | Tampilkan log dari 1 jam terakhir untuk service  | |
| docker inspect | Lihat informasi terperinci tentang container yang menjalankan service | |
| docker inspect $(docker compose ps -q web) | Dapatkan JSON dengan info detail tentang container service  | |
| docker container stats | Pantau penggunaan sumber daya container yang menjalankan service | |
| docker stats $(docker compose ps -q worker) | Lacak penggunaan CPU, memori, dan sumber daya lain untuk container service  | |
| docker compose run --rm | Jalankan container sementara dengan pengaturan service, berguna untuk debugging | |
| docker compose run --rm web sh | Mulai container one-off untuk service  | |
| docker container cp | Salin file antara host dan container | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | Salin file dari container service  | 
💡 Untuk debugging nyaman dari setup multi-service yang kompleks, gunakan
docker compose run --rmuntuk meluncurkan container individual dengan jaringan dan volume yang diperlukan tanpa memengaruhi service utama.
📚 Sumber Daya Tambahan
🚫 Mengabaikan File dengan .dockerignore
Tambahkan file dan folder ke file .dockerignore yang tidak boleh disertakan dalam image untuk mengurangi ukuran dan mempercepat build:
node_modules/
*.log
.env⚡ Menyederhanakan Perintah dengan Alias
Anda dapat membuat alias untuk perintah yang sering digunakan agar lebih cepat dijalankan:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 Tips: Saran Penggunaan Docker
- Jangan coba menghafal semuanya — gunakan docker --helpataudocker <command> --helpuntuk menjelajahi perintah.
 
- Berlatihlah secara rutin dan bereksperimen dengan proyek sederhana.
 
- Perhatikan ukuran image dan hapus file yang tidak perlu melalui - .dockerignore.
🌐 Tautan Berguna
📘 Dokumentasi Resmi Docker — panduan lengkap dan referensi untuk semua topik Docker:
https://docs.docker.com/
📙 Docker Cheat Sheet — lembar pintasan resmi lengkap Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — image dan registry:
https://hub.docker.com/