🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Diterbitkan

31 Agustus 2025

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 latest dari repositori test1

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 container

docker exec container ls /app

Jalankan perintah ls di direktori /app dalam container

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 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 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 old_name menjadi new_name

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 container

docker container pause Jeda semua proses dalam container
docker pause container

Jeda container container

docker container unpause Lanjutkan container yang dijeda
docker unpause container

Lanjutkan container 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 my_image dari direktori saat ini

docker build -t my_image:1.0 .

Bangun image dengan tag versi 1.0

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 my_img dengan tag v1 dari container container

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 myrepo

docker tag my_image:1.0 my_image:stable

Buat tag stable untuk image bertag 1.0

docker tag my_image my_image:backup

Tambahkan tag backup ke image lokal

docker image push Push image ke Docker Hub atau registry lain
docker push myrepo/my_image:latest

Push image bertag latest ke repositori myrepo

docker push myrepo/my_image:1.0

Push image bertag 1.0

docker push myrepo/my_image

Push image dengan tag default latest

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 bridge

docker network ls --format '{{.Name}}'

Tampilkan hanya nama jaringan

docker network create Buat jaringan Docker baru
docker network create my_net

Buat jaringan bernama my_net dengan pengaturan default

docker network create --driver bridge my_bridge_net

Buat jaringan dengan driver bridge

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 container ke jaringan my_net

docker network connect --alias db_net my_net container

Hubungkan dengan alias db_net

docker network disconnect Putuskan container dari jaringan
docker network disconnect my_net container

Putuskan container container dari jaringan my_net

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 my_vol

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 my_vol dalam format JSON

docker volume rm Hapus satu atau lebih volume
docker volume rm my_vol

Hapus volume bernama my_vol

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 web

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 web

docker compose exec db ls /var/lib/postgresql

Jalankan perintah ls di dalam container database

docker compose exec -d worker touch /tmp/done

Jalankan perintah di dalam container worker dalam mode detached

docker compose build Bangun atau bangun ulang image service
docker compose build

Bangun semua image yang didefinisikan di docker-compose.yml

docker compose build web

Bangun hanya image service web

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 web

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 db

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 web

docker compose start db api

Mulai beberapa service sekaligus

docker compose stop Hentikan service tanpa menghapus container
docker compose stop web

Hentikan service web

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 -o

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 mystack

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 nginx

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 unless-stopped

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 (A — Added)

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 alpine atau scratch untuk ukuran minimal.
    Untuk menggabungkan lapisan, gunakan --squash saat 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 RUN untuk 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=value atau .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

🐞 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 (with strace) Utilitas Linux untuk masuk ke namespace proses lain (di sini, container). Digunakan dengan strace untuk 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 ps di 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 ps aux

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 (A — Added)

docker diff my_container | grep '^C'

Tampilkan hanya file yang diubah (C — Changed)

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 web dan db dalam mode detached

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 web

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 db

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 worker

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 db

docker compose exec web sh

Buka shell di dalam container web

docker compose exec api curl http://localhost:8080

Eksekusi permintaan curl dari container service api

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 web dan db

docker compose pause Jeda operasi service
docker compose pause api

Jeda service api

docker compose unpause Lanjutkan service yang dijeda
docker compose unpause api

Lanjutkan service api

docker compose create Buat container tanpa menjalankannya
docker compose create web db

Buat container untuk service web dan db tetapi jangan jalankan

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 web

🛠 Praktik dan Otomatisasi Berguna dengan Docker Compose

  • Pemisahan Lingkungan
    Gunakan file docker-compose.override.yml terpisah 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 .env berbeda (.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 .env untuk variabel lingkungan (perlu diingat file .env tidak terenkripsi dan tidak boleh di-commit ke repo publik)
    • docker secret dan docker config untuk 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)

  • Urutan Startup dengan depends_on dan 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 -d menjalankan container di latar belakang, dan --remove-orphans menghapus 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 volumes untuk 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-stopped adalah 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 web

docker compose exec db psql -U user -d database

Jalankan perintah psql di dalam container service db

docker compose logs Lihat log service untuk diagnosis dan pemantauan
docker compose logs -f db

Lihat log service db secara real-time

docker compose logs --tail=50 api

Tampilkan 50 baris log terakhir dari service api

docker compose logs --since=1h web

Tampilkan log dari 1 jam terakhir untuk service web

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 web

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 worker

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 web dengan shell interaktif

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 db ke host

💡 Untuk debugging nyaman dari setup multi-service yang kompleks, gunakan docker compose run --rm untuk 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 --help atau docker <command> --help untuk 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/