Docker adalah aplikasi yang memudahkan proses pengelolaan proses aplikasi dalam containers. Containers memungkinkan Anda menjalankan aplikasi dalam proses dan sumber daya yang terisolasi. Mereka mirip dengan mesin virtual, tetapi kontainer lebih portabel, lebih ramah sumber daya, dan lebih bergantung pada sistem operasi host.
Instalasi Docker #
On Debian/Ubuntu systems: #
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
On RHEL-based systems (e.g. Rocky Linux 9): #
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y -q --best install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin docker-model-plugin
sudo systemctl enable --now docker
Konfigurasi daemon.json
#
Edit atau buat file konfigurasi Docker di path /etc/docker/daemon.json, lalu tambahkan baris berikut:
{
"icc": false,
"live-restore": true,
"userland-proxy": false,
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"experimental": false,
"no-new-privileges": true
}
Restart service Docker agar konfigurasi baru diterapkan:
sudo systemctl restart docker
Menambahkan Pengguna ke Grup Docker #
sudo groupadd docker 2>/dev/null || true
sudo usermod -aG docker $USER
Cek apakah user sudah masuk ke grup docker
groups
Contoh output:
web1 docker
Pastikan nama grup docker muncul dalam daftar grup user Anda.
Test docker tanpa sudo
docker run hello-world
Jika berhasil, Anda akan melihat pesan:
“Hello from Docker!”
Cheatsheet Docker #
Search images #
docker search nginx
Download image #
docker pull nginx
Show images #
docker images
Running container #
docker run -it ubuntu
-it).
Mengarahkan Log Container ke journalctl Host
Untuk menjalankan container agar log-nya dikirim ke journalctl pada host, gunakan opsi --log-driver=journald saat membuat container:
docker run -dit --name test --log-driver=journald ubuntu
Melihat Log Container
Untuk melihat log dari container yang telah dikirim ke journalctl, gunakan filter CONTAINER_NAME:
journalctl CONTAINER_NAME=test
- Pastikan daemon
systemd-journaldaktif di host. - Anda juga bisa memfilter berdasarkan waktu atau unit lain menggunakan opsi tambahan
journalctlseperti-u,-f, atau--since.
List containers #
docker ps -a
Gunakan opsi
-auntuk melihat semua container, termasuk yang sudah berhenti.
Manage containers #
docker start 0596bd489a2d
Gunakan perintah berikut untuk mengelola container:
docker start <container_id>— Menjalankan containerdocker stop <container_id>— Menghentikan containerdocker restart <container_id>— Me-restart container
Inspect containers #
docker inspect 0596bd489a2d
Menampilkan Informasi Tertentu dari Semua Container
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
Menampilkan Health Logs Secara Spesifik
docker inspect --format='{{json .State.Health}}' 0596bd489a2d | python -m json.tool
Docker Compose #
Berikut adalah contoh file docker-compose.yml dengan opsi pull_policy:
services:
app_always:
image: nginx:latest
deploy:
update_config:
failure_action: rollback
rollback_config:
failure_action: continue
pull_policy: always
Pada contoh di atas, opsi pull_policy menentukan bagaimana Docker menangani penarikan (pull) image dari registry. Nilai yang dapat digunakan antara lain:
always: Selalu menarik (pull) image dari registry, meskipun sudah tersedia secara lokal.missing: Menarik image hanya jika image tersebut tidak tersedia di sistem lokal.never: Tidak akan menarik image dari registry; hanya menggunakan image yang sudah ada secara lokal.
pull_policy adalah fitur yang diperkenalkan pada versi Docker Compose v2.20 ke atas. Pastikan Anda menggunakan versi Compose yang mendukung opsi ini.
Menampilkan Resource Docker #
Perintah berikut digunakan untuk menampilkan informasi penggunaan resource (terutama disk) oleh Docker, termasuk image, container, volume, dan cache yang digunakan.
docker system df --verbose
Remove unused data #
Untuk membersihkan semua resource yang tidak terpakai.
docker system prune -a -f
Backup and restore #
Copy isi volume ke volume lain (langsung via container)
docker run --rm \
-v volume_asal:/from \
-v volume_tujuan:/to \
alpine sh -c "cp -a /from/. /to/"
-v volume_asal:/from→ mount volume sumber-v volume_tujuan:/to→ mount volume targetcp -a→ copy dengan atribut dan struktur folder
Backup volume ke file .tar.gz
docker run --rm \
-v volume_asal:/data \
-v $(pwd):/backup \
alpine sh -c "tar czf /backup/backup.tar.gz -C /data ."
- Backup disimpan di direktori lokal sebagai
backup.tar.gz
Restore volume dari file .tar.gz
docker run --rm \
-v volume_tujuan:/data \
-v $(pwd):/backup \
alpine sh -c "tar xzf /backup/backup.tar.gz -C /data"
Logging #
Get existing logs first with timestamps, sort them, and remove timestamps
docker service logs container_name --timestamps --raw 2>&1 | head -n 500 | sort | sed 's/^[^ ]* //'
Get live logs without timestamps
docker service logs container_name --tail 0 --follow --raw
Get live log docker compose
docker compose logs service_name --tail 500 --follow