Docker Command Cheat Sheet: 20 Perintah Docker dan Docker Compose yang Wajib Dikuasai Sysadmin
Docker telah menjadi salah satu teknologi penting dalam pengelolaan aplikasi modern. Mulai dari lingkungan pengembangan, laboratorium pembelajaran, hingga server produksi, Docker membantu administrator menjalankan aplikasi secara konsisten tanpa harus melakukan konfigurasi ulang seluruh lingkungan sistem.
Bagi seorang System Administrator, DevOps Engineer, maupun Linux Administrator, kemampuan menggunakan Docker melalui Command Line Interface (CLI) merupakan keterampilan yang sangat berguna.
Bayangkan Anda mengelola server yang menjalankan beberapa aplikasi sekaligus, seperti Nginx, MariaDB, Redis, WordPress, dan aplikasi berbasis Node.js. Tanpa teknologi container, setiap aplikasi perlu dikonfigurasi dengan dependensi dan kebutuhan lingkungan masing-masing.
Docker memungkinkan aplikasi tersebut dijalankan dalam container yang terisolasi secara proses dan lingkungan, tetapi tetap menggunakan kernel sistem operasi host.
Meskipun Docker menyediakan berbagai antarmuka pengelolaan, seperti Portainer, penguasaan perintah Docker melalui terminal tetap penting. Terutama ketika administrator harus melakukan troubleshooting melalui SSH, memeriksa log aplikasi, atau menangani container yang mengalami masalah.
Dalam artikel ini, kita akan mempelajari 20 perintah Docker dan Docker Compose yang paling sering digunakan, lengkap dengan contoh implementasi, penjelasan fungsi, dan praktik terbaik untuk pengelolaan server.
Mengenal Docker dan Cara Kerjanya
Apa Itu Docker?
Docker adalah platform containerization yang memungkinkan pengembang dan administrator mengemas aplikasi beserta dependensinya menjadi sebuah image yang dapat dijalankan sebagai container.
Docker membantu memastikan aplikasi memiliki lingkungan runtime yang konsisten, baik ketika dijalankan pada laptop pengembang, server pengujian, maupun lingkungan produksi yang kompatibel.
Komponen utama Docker meliputi:
- Docker Engine: Mesin yang bertanggung jawab membangun dan menjalankan container.
- Docker Image: Template berisi filesystem aplikasi, dependensi, dan konfigurasi.
- Docker Container: Instance dari image yang sedang atau pernah dijalankan.
- Dockerfile: File instruksi untuk membangun image Docker.
- Docker Volume: Mekanisme penyimpanan data persisten.
- Docker Network: Fasilitas komunikasi antarkontainer dan jaringan eksternal.
- Docker Compose: Alat untuk mendefinisikan dan mengelola aplikasi multi-container.
Perbedaan Docker Image dan Container
Salah satu konsep yang perlu dipahami sebelum menggunakan Docker adalah perbedaan antara image dan container.
Docker Image merupakan template yang bersifat read-only, sedangkan container merupakan instance dari image tersebut yang memiliki lapisan filesystem yang dapat ditulis.
Sebagai analogi, Docker Image seperti template mesin virtual, sementara container adalah lingkungan aplikasi yang dibuat dari template tersebut.
Satu Docker Image dapat digunakan untuk menjalankan banyak container dengan konfigurasi berbeda.
Contohnya, image Nginx dapat digunakan untuk menjalankan beberapa container web server pada port yang berbeda.
Docker vs Virtual Machine
Docker dan Virtual Machine sama-sama digunakan untuk menjalankan lingkungan aplikasi, tetapi keduanya memiliki pendekatan berbeda.
| Aspek | Docker Container | Virtual Machine |
|---|---|---|
| Virtualisasi | Level sistem operasi | Level perangkat keras |
| Kernel | Berbagi kernel host | Kernel OS tamu sendiri |
| Startup | Umumnya cepat | Umumnya lebih lama |
| Resource | Relatif ringan | Lebih besar |
| Isolasi | Proses dan namespace | Batas VM melalui hypervisor |
| Penggunaan | Microservices, aplikasi | OS lengkap, isolasi VM |
Docker bukan pengganti semua kebutuhan virtualisasi. Dalam banyak infrastruktur modern, Docker justru dijalankan di atas Virtual Machine.
Sebagai contoh, sebuah server Proxmox dapat menyediakan VM Ubuntu Server yang kemudian menjalankan Docker Engine untuk mengelola aplikasi.
Persiapan Menggunakan Docker di Linux
Sebelum mempraktikkan perintah Docker, pastikan Docker Engine dan Docker Compose Plugin telah terpasang.
Tutorial ini menggunakan contoh lingkungan Ubuntu Server dengan Docker Engine yang telah terinstal.
Memeriksa Versi Docker
Jalankan perintah berikut:
docker --version
Untuk memeriksa informasi client dan server Docker:
docker version
Sedangkan untuk memeriksa Docker Compose:
docker compose version
Perintah tersebut membantu memastikan Docker CLI dapat dijalankan dan Compose Plugin tersedia.
Memeriksa Status Docker Engine
Pada server Linux yang menggunakan systemd:
sudo systemctl status docker
Jika Docker belum berjalan, jalankan:
sudo systemctl start docker
Untuk mengaktifkan Docker secara otomatis saat server melakukan booting:
sudo systemctl enable docker
Jika menggunakan instalasi Docker standar, perintah di atas biasanya dapat digunakan.
Perlu diperhatikan bahwa metode pengelolaan layanan dapat berbeda pada instalasi Docker rootless atau lingkungan khusus.
Memeriksa Informasi Docker
Gunakan:
docker info
Perintah ini menampilkan informasi seperti:
- Jumlah container dan image.
- Storage driver.
- Runtime container.
- Informasi CPU dan memori host.
- Docker Root Directory.
- Konfigurasi Docker Engine.
Informasi tersebut berguna ketika melakukan troubleshooting pada server.
20 Perintah Docker yang Wajib Dikuasai
Untuk memudahkan pembelajaran, 20 perintah berikut dibagi menjadi empat kategori utama.
A. Manajemen Container Docker
1. docker ps — Melihat Container yang Sedang Berjalan
Perintah:
docker ps
Fungsi:
Menampilkan daftar container yang sedang berjalan.
Informasi yang ditampilkan meliputi Container ID, Image, Command, Created, Status, Ports, dan Names.
Contoh:
docker ps
Contoh output:
CONTAINER ID IMAGE STATUS PORTS
a1b2c3d4e5f6 nginx Up 2 hours 0.0.0.0:8080->80/tcp
Perintah ini sangat sering digunakan ketika administrator ingin memastikan aplikasi masih berjalan.
Tips:
Untuk menampilkan hanya ID container:
docker ps -q
Output tersebut dapat digunakan sebagai input untuk skrip otomatisasi.
2. docker ps -a — Melihat Semua Container
Perintah:
docker ps -a
Berbeda dengan docker ps, perintah ini menampilkan seluruh container, termasuk container yang sudah berhenti.
Contoh status container yang dapat ditemukan:
- Up: Container sedang berjalan.
- Exited: Proses utama container telah berhenti.
- Created: Container telah dibuat tetapi belum dijalankan.
- Restarting: Container sedang dalam proses restart.
- Paused: Proses container sedang dijeda.
Contoh penggunaan:
docker ps -a
Perintah ini sangat membantu ketika container tidak muncul pada daftar docker ps.
3. docker run — Menjalankan Container Baru
Perintah:
docker run
Digunakan untuk membuat dan menjalankan container dari Docker Image.
Contoh:
docker run -d \
--name web-nginx \
-p 8080:80 \
nginx:stable
Penjelasan:
-d: Menjalankan container dalam background.--name web-nginx: Memberikan nama container.-p 8080:80: Memetakan port 8080 pada host ke port 80 container.nginx:stable: Image yang digunakan.
Setelah container berjalan, akses:
http://IP-SERVER:8080
Jika port dapat diakses melalui firewall dan jaringan, halaman default Nginx akan ditampilkan.
Untuk pengujian lokal yang tidak perlu dibuka ke jaringan, lebih aman menggunakan:
docker run -d \
--name web-nginx-local \
-p 127.0.0.1:8081:80 \
nginx:stable
Dengan konfigurasi tersebut, port hanya dipublikasikan pada loopback host.
4. docker start — Menjalankan Container yang Berhenti
Perintah:
docker start web-nginx
Digunakan untuk menjalankan kembali container yang sebelumnya berhenti.
Perlu dipahami bahwa docker start tidak membuat container baru.
Perintah tersebut menjalankan kembali container yang sudah ada beserta konfigurasi yang telah dibuat sebelumnya.
Contoh:
docker ps -a
docker start web-nginx
docker ps
5. docker stop — Menghentikan Container
Perintah:
docker stop web-nginx
Digunakan untuk menghentikan container yang sedang berjalan.
Secara default, Docker mengirimkan sinyal penghentian kepada proses utama container, memberikan waktu untuk berhenti secara normal, kemudian melakukan penghentian paksa jika batas waktu terlampaui.
Contoh:
docker stop web-nginx
Untuk memberikan waktu penghentian hingga 30 detik:
docker stop -t 30 web-nginx
Praktik ini berguna untuk aplikasi yang memerlukan waktu menyelesaikan proses sebelum berhenti.
B. Informasi, Monitoring, dan Troubleshooting
6. docker logs — Melihat Log Container
Perintah:
docker logs web-nginx
Menampilkan log yang dikumpulkan oleh logging driver Docker untuk container tersebut.
Log sangat penting untuk mengetahui penyebab aplikasi mengalami error.
Contoh:
docker logs --tail 100 web-nginx
Menampilkan 100 baris log terakhir.
Untuk memantau log secara real-time:
docker logs -f web-nginx
Untuk menampilkan timestamp:
docker logs -f --timestamps web-nginx
Tips Sysadmin:
Ketika aplikasi mengalami HTTP 500, restart berulang, atau gagal terhubung ke database, pemeriksaan log container sebaiknya menjadi salah satu langkah awal troubleshooting.
Perlu diketahui bahwa ketersediaan log melalui docker logs bergantung pada logging driver yang digunakan.
7. docker exec -it — Menjalankan Perintah di Dalam Container
Perintah:
docker exec -it web-nginx sh
Digunakan untuk menjalankan perintah dalam container yang sedang berjalan.
Parameter:
-i: Menjaga standard input tetap terbuka.-t: Mengalokasikan pseudo-terminal.
Jika image memiliki Bash:
docker exec -it web-nginx bash
Namun, tidak semua Docker Image menyediakan Bash. Image minimal sering hanya menyediakan sh, bahkan sebagian tidak menyediakan shell sama sekali.
Contoh pemeriksaan konfigurasi Nginx:
docker exec web-nginx nginx -t
Perintah ini berguna untuk memvalidasi konfigurasi Nginx tanpa perlu membuka shell interaktif.
Best Practice:
Hindari melakukan perubahan manual permanen di dalam container produksi. Perubahan konfigurasi sebaiknya dilakukan melalui Dockerfile, volume, atau mekanisme deployment yang terkontrol.
8. docker inspect — Melihat Detail Konfigurasi Container
Perintah:
docker inspect web-nginx
Menampilkan informasi detail dalam format JSON.
Informasi yang dapat diperiksa meliputi:
- IP Address.
- Network Settings.
- Mount Points.
- Environment Variables.
- Restart Policy.
- Status Container.
- Konfigurasi Port.
Untuk melihat alamat IP container pada network tertentu:
docker inspect -f \
'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
web-nginx
Perintah ini berguna saat troubleshooting konektivitas antarkontainer.
Perhatikan bahwa docker inspect dapat menampilkan environment variable yang berisi informasi sensitif. Jangan membagikan output lengkap tanpa melakukan pemeriksaan dan penyamaran data rahasia.
9. docker stats — Monitoring Resource Container
Perintah:
docker stats
Menampilkan penggunaan resource container secara langsung.
Metrik yang ditampilkan antara lain:
- CPU Usage.
- Memory Usage.
- Network I/O.
- Block I/O.
- PIDs.
Contoh:
docker stats web-nginx
Untuk mengambil satu snapshot:
docker stats --no-stream
Perintah ini sangat berguna ketika aplikasi terasa lambat atau penggunaan CPU server meningkat.
Namun, docker stats bukan pengganti sistem monitoring jangka panjang seperti Prometheus dan Grafana.
10. docker top — Melihat Proses di Dalam Container
Perintah:
docker top web-nginx
Digunakan untuk menampilkan proses yang sedang berjalan di dalam container.
Informasi ini membantu administrator mengidentifikasi proses utama dan proses tambahan yang aktif.
Contohnya, pada container Nginx, Anda dapat melihat proses master dan worker Nginx.
Perintah ini dapat digunakan ketika melakukan investigasi penggunaan resource atau memastikan proses aplikasi berjalan sebagaimana mestinya.
C. Manajemen Docker Image
11. docker images — Melihat Daftar Image
Perintah:
docker images
Menampilkan daftar Docker Image yang tersimpan secara lokal.
Informasi yang ditampilkan mencakup repository, tag, image ID, dan ukuran image.
Contoh:
docker images
Gunakan perintah ini untuk mengetahui image apa saja yang tersedia pada server.
12. docker pull — Mengunduh Docker Image
Perintah:
docker pull nginx:stable
Digunakan untuk mengambil Docker Image dari registry.
Jika registry tidak disebutkan, Docker biasanya menggunakan Docker Hub sebagai default.
Contoh lainnya:
docker pull redis:7
docker pull postgres:16
Best Practice:
Untuk lingkungan produksi, gunakan versi image yang telah diuji dan pertimbangkan pinning berdasarkan digest agar deployment lebih konsisten.
Menggunakan tag latest tanpa pengendalian versi dapat menimbulkan perubahan yang tidak diharapkan ketika image diperbarui.
13. docker build — Membangun Docker Image
Perintah:
docker build -t aplikasi-web:1.0 .
Digunakan untuk membangun Docker Image berdasarkan instruksi dalam Dockerfile.
Contoh Dockerfile sederhana:
FROM nginx:stable-alpine
COPY index.html /usr/share/nginx/html/
Simpan file tersebut dengan nama Dockerfile.
Kemudian jalankan:
docker build -t aplikasi-web:1.0 .
Penjelasan:
-t: Memberikan nama dan tag image.aplikasi-web:1.0: Nama dan versi image..: Build context dari direktori saat ini.
Untuk menjalankan hasil build:
docker run -d \
--name aplikasi-web \
-p 8082:80 \
aplikasi-web:1.0
Image hasil build dapat digunakan untuk membuat container baru tanpa perlu mengulang proses instalasi aplikasi secara manual.
14. docker rmi — Menghapus Docker Image
Perintah:
docker rmi aplikasi-web:1.0
Digunakan untuk menghapus image dari penyimpanan lokal.
Perlu diperhatikan bahwa image yang masih digunakan oleh container dapat gagal dihapus.
Sebelum menghapus image, periksa container yang menggunakannya.
docker ps -a
Untuk membersihkan image yang tidak digunakan:
docker image prune
Jangan menggunakan opsi penghapusan paksa tanpa memahami dependensi image terhadap container yang ada.
15. docker tag — Memberikan Tag pada Image
Perintah:
docker tag aplikasi-web:1.0 \
username/aplikasi-web:1.0
Digunakan untuk memberikan referensi nama atau tag baru kepada Docker Image.
Perintah ini tidak membuat salinan seluruh layer image.
Contoh penggunaannya adalah menyiapkan image untuk dikirim ke container registry.
docker tag aplikasi-web:1.0 \
registry.example.com/aplikasi-web:1.0
Setelah login ke registry yang sesuai, image dapat dikirim menggunakan:
docker push registry.example.com/aplikasi-web:1.0
Penggunaan tag yang konsisten membantu proses versioning dan deployment.
D. Docker Compose untuk Aplikasi Multi-Container
Docker Compose digunakan untuk mendefinisikan dan menjalankan beberapa layanan dalam satu aplikasi melalui file konfigurasi YAML.
Sebagai contoh, aplikasi WordPress dapat terdiri atas container WordPress dan database MariaDB yang dikelola sebagai satu project Compose.
16. docker compose up -d — Menjalankan Semua Service
Perintah:
docker compose up -d
Digunakan untuk membuat dan menjalankan service yang didefinisikan dalam file Compose.
Parameter -d menjalankan service dalam mode detached.
Docker Compose akan membuat network dan resource lain yang diperlukan berdasarkan konfigurasi.
Jika konfigurasi service atau image berubah, Compose dapat membuat ulang container untuk menerapkan perubahan.
17. docker compose down — Menghentikan Project Compose
Perintah:
docker compose down
Digunakan untuk menghentikan dan menghapus container serta network yang dibuat oleh project Compose.
Secara default, named volume tidak dihapus oleh perintah tersebut.
Namun, gunakan dengan hati-hati karena container akan dihentikan dan koneksi aplikasi terputus.
Perintah berikut berisiko menghapus data persisten pada named volume project:
docker compose down -v
Jangan menjalankan opsi -v pada server produksi tanpa memastikan data penting telah dicadangkan.
18. docker compose logs -f — Monitoring Log Semua Service
Perintah:
docker compose logs -f
Menampilkan log dari service dalam project Compose secara real-time.
Untuk melihat log satu service:
docker compose logs -f web
Untuk membatasi output:
docker compose logs --tail 100
Perintah ini berguna ketika aplikasi terdiri atas beberapa service yang saling berkomunikasi.
19. docker compose ps — Memeriksa Status Service
Perintah:
docker compose ps
Menampilkan container yang menjadi bagian dari project Compose beserta status dan informasi port.
Contoh:
docker compose ps
Untuk menampilkan seluruh container project, termasuk yang berhenti:
docker compose ps -a
Perintah ini membantu administrator memeriksa service mana yang sedang berjalan dan service mana yang gagal.
20. docker compose build — Membangun Image Service
Perintah:
docker compose build
Digunakan untuk membangun image bagi service yang memiliki konfigurasi build pada file Compose.
Contoh:
services:
web:
build: .
ports:
- "8080:80"
Kemudian jalankan:
docker compose build
Setelah image selesai dibangun:
docker compose up -d
Untuk membangun dan menjalankan service dalam satu perintah:
docker compose up -d --build
Perintah ini sering digunakan dalam pengembangan aplikasi dan deployment berbasis Docker Compose.
Ringkasan Docker Command Cheat Sheet
Berikut ringkasan 20 perintah yang dapat disimpan sebagai referensi cepat.
| No. | Perintah | Fungsi |
|---|---|---|
| 1 | docker ps | Container aktif |
| 2 | docker ps -a | Semua container |
| 3 | docker run | Membuat dan menjalankan container |
| 4 | docker start | Menjalankan container berhenti |
| 5 | docker stop | Menghentikan container |
| 6 | docker logs | Melihat log container |
| 7 | docker exec -it | Menjalankan perintah dalam container |
| 8 | docker inspect | Informasi konfigurasi |
| 9 | docker stats | Monitoring resource |
| 10 | docker top | Melihat proses container |
| 11 | docker images | Daftar image lokal |
| 12 | docker pull | Mengunduh image |
| 13 | docker build | Membangun image |
| 14 | docker rmi | Menghapus image |
| 15 | docker tag | Memberikan tag image |
| 16 | docker compose up -d | Menjalankan project |
| 17 | docker compose down | Menghentikan project |
| 18 | docker compose logs -f | Monitoring log project |
| 19 | docker compose ps | Status service |
| 20 | docker compose build | Build image service |
Tutorial Praktis: Deployment Nginx Menggunakan Docker Compose
Setelah memahami perintah dasar, kita akan mencoba implementasi sederhana menggunakan Nginx.
Tujuan praktikum ini adalah menjalankan web server Nginx dalam container, menampilkan halaman HTML, memeriksa log, dan melakukan monitoring.
Langkah 1 — Membuat Direktori Project
mkdir -p ~/docker-lab-nginx/html
cd ~/docker-lab-nginx
Direktori tersebut digunakan untuk menyimpan konfigurasi Compose dan file website.
Langkah 2 — Membuat Halaman HTML
Buat file:
nano html/index.html
Masukkan kode berikut:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Docker Lab Nginx</title>
</head>
<body>
<h1>Docker Nginx Berhasil!</h1>
<p>Web server berjalan menggunakan Docker Compose.</p>
</body>
</html>
Simpan file tersebut.
Langkah 3 — Membuat File compose.yaml
Buat file:
nano compose.yaml
Masukkan konfigurasi:
services:
web:
image: nginx:stable-alpine
container_name: lab-nginx
ports:
- "127.0.0.1:8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
Penjelasan konfigurasi:
image: Menentukan Docker Image.container_name: Nama container.ports: Memetakan port 8080 pada loopback host ke port 80 container.volumes: Memasang direktori HTML dari host ke container.:ro: Membuat mount menjadi read-only di dalam container.restart: Mengatur kebijakan restart container.
Konfigurasi ini cocok untuk pengujian lokal karena port 8080 tidak dibuka langsung ke jaringan eksternal.
Jika server harus diakses dari komputer lain dalam laboratorium, pengaturan binding port dapat disesuaikan dengan alamat IP server, disertai pengamanan firewall.
Langkah 4 — Memvalidasi File Compose
Jalankan:
docker compose config
Perintah ini memvalidasi dan menampilkan konfigurasi Compose yang telah diproses.
Jika terjadi kesalahan indentasi YAML, Docker Compose biasanya akan menampilkan pesan error.
Langkah 5 — Menjalankan Container
docker compose up -d
Docker akan mengambil image Nginx jika belum tersedia secara lokal, kemudian membuat dan menjalankan container.
Langkah 6 — Memeriksa Status Container
docker compose ps
Pastikan service web memiliki status berjalan.
Langkah 7 — Menguji Web Server
Dari host server:
curl http://127.0.0.1:8080
Jika berhasil, respons akan berisi halaman HTML yang telah dibuat.
Untuk pengujian dari komputer lain, gunakan konfigurasi binding port yang sesuai dan pastikan akses jaringan telah diizinkan.
Langkah 8 — Memantau Log
docker compose logs -f web
Buka halaman website beberapa kali, kemudian perhatikan log permintaan HTTP yang muncul.
Tekan Ctrl+C untuk menghentikan tampilan log. Tindakan ini tidak menghentikan container.
Langkah 9 — Memantau Resource
docker stats lab-nginx
Perhatikan penggunaan CPU, memory, dan network I/O.
Lakukan beberapa permintaan HTTP dan amati perubahan metrik.
Langkah 10 — Menghentikan Project
docker compose down
Perintah ini menghentikan dan menghapus container project.
Direktori html yang berada pada host tetap tersedia karena menggunakan bind mount.
Studi Kasus: Troubleshooting Container yang Tidak Bisa Diakses
Misalnya, sebuah aplikasi web dalam container Docker tidak dapat diakses melalui browser.
Masalah tersebut dapat disebabkan oleh beberapa faktor:
- Container tidak berjalan.
- Aplikasi gagal startup.
- Port tidak dipublikasikan dengan benar.
- Firewall memblokir koneksi.
- Aplikasi hanya mendengarkan pada alamat loopback di dalam container.
- Network Docker mengalami masalah.
- Konfigurasi aplikasi salah.
Lakukan pemeriksaan secara bertahap.
Tahap 1 — Memeriksa Container
docker ps -a
Jika status container Exited, berarti proses utama telah berhenti.
Tahap 2 — Memeriksa Log
docker logs --tail 100 lab-nginx
Periksa apakah terdapat pesan error konfigurasi atau kegagalan startup.
Tahap 3 — Memeriksa Port
docker port lab-nginx
Perintah ini menunjukkan pemetaan port container ke host.
Periksa apakah port sesuai dengan konfigurasi yang diharapkan.
Tahap 4 — Memeriksa Konfigurasi
docker inspect lab-nginx
Perhatikan network, mount, environment variable, dan port binding.
Tahap 5 — Menguji Aplikasi dari Dalam Container
Untuk Nginx:
docker exec lab-nginx nginx -t
Perintah tersebut memvalidasi konfigurasi Nginx.
Jika perlu, uji layanan HTTP dari host menggunakan curl.
Tahap 6 — Memeriksa Firewall
Pada Ubuntu yang menggunakan UFW:
sudo ufw status
Periksa kebijakan firewall host dan firewall eksternal.
Perlu diperhatikan bahwa port yang dipublikasikan Docker dapat memiliki perilaku berbeda terhadap aturan UFW karena mekanisme NAT dan firewall Docker. Jangan mengandalkan UFW saja untuk membatasi akses ke port Docker yang dipublikasikan.
Gunakan binding alamat IP yang eksplisit dan kebijakan firewall yang sesuai dengan arsitektur server.
Kesalahan yang Sering Terjadi Saat Menggunakan Docker
1. Menggunakan docker run Berulang Kali
Kesalahan:
Menjalankan docker run berkali-kali dengan nama atau port yang sama.
Dampak:
Muncul konflik nama container atau port yang sudah digunakan.
Solusi:
Gunakan docker start untuk menjalankan kembali container yang sudah ada, atau kelola aplikasi menggunakan Docker Compose.
2. Tidak Menggunakan Volume untuk Data Penting
Kesalahan:
Menyimpan database hanya pada writable layer container.
Dampak:
Data dapat hilang ketika container dihapus dan dibuat ulang tanpa mekanisme persistensi.
Solusi:
Gunakan named volume atau bind mount sesuai kebutuhan aplikasi.
Contoh:
docker volume create data-aplikasi
Volume membantu menjaga persistensi data, tetapi bukan pengganti backup.
3. Menggunakan Image latest Tanpa Pengujian
Kesalahan:
Menggunakan image dengan tag latest untuk seluruh deployment produksi.
Dampak:
Perubahan versi image dapat menyebabkan ketidakcocokan konfigurasi atau aplikasi.
Solusi:
Gunakan versi yang telah diuji dan terapkan proses pembaruan terkontrol.
4. Tidak Membatasi Penggunaan Resource
Kesalahan:
Menjalankan container tanpa mempertimbangkan konsumsi CPU dan memori.
Dampak:
Satu container yang bermasalah dapat menghabiskan resource host dan mengganggu aplikasi lainnya.
Solusi:
Terapkan pembatasan resource yang sesuai dengan kebutuhan aplikasi.
Contoh:
docker run -d \
--name nginx-limited \
--memory="512m" \
--cpus="1.0" \
-p 127.0.0.1:8083:80 \
nginx:stable
Parameter tersebut membatasi memori hingga 512 MiB dan kuota CPU setara satu core.
5. Menghapus Volume Tanpa Backup
Kesalahan:
Menjalankan:
docker compose down -v
tanpa memahami dampaknya.
Dampak:
Named volume yang terkait dengan project dapat terhapus, termasuk data aplikasi atau database.
Solusi:
Lakukan backup, verifikasi isi volume, dan gunakan perintah penghapusan hanya setelah memahami resource yang terdampak.
6. Mengabaikan Keamanan Docker
Kesalahan:
Menjalankan semua container dengan hak akses berlebihan atau membuka port tanpa pembatasan.
Dampak:
Meningkatkan risiko kompromi layanan dan host.
Solusi:
- Hindari container privileged jika tidak diperlukan.
- Gunakan user non-root jika aplikasi mendukung.
- Batasi Linux capabilities.
- Hindari memasang Docker socket ke container yang tidak dipercaya.
- Perbarui image dan Docker Engine.
- Gunakan secrets management untuk data sensitif.
- Batasi port yang dipublikasikan.
- Terapkan monitoring dan audit berkala.
Keanggotaan pada grup docker juga perlu dibatasi karena secara praktis memberikan kemampuan administratif yang sangat tinggi pada host Docker.
Tips Profesional Mengelola Docker di Server Produksi
Gunakan Docker Compose untuk Aplikasi Multi-Service
Docker Compose membantu menjaga konfigurasi aplikasi dalam satu file deklaratif.
Dengan Compose, administrator dapat mengelola network, volume, environment variable, dan service secara konsisten.
Simpan file konfigurasi dalam version control, tetapi jangan memasukkan password atau secrets ke repository.
Terapkan Healthcheck
Status container Up tidak selalu berarti aplikasi siap menerima permintaan.
Gunakan Docker Healthcheck untuk memeriksa kondisi aplikasi.
Contoh pada Dockerfile:
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -fsS http://127.0.0.1/ || exit 1
Contoh ini membutuhkan curl tersedia dalam image. Untuk image minimal, gunakan metode pemeriksaan yang sesuai dengan utilitas yang benar-benar terpasang.
Healthcheck membantu mendeteksi aplikasi yang tidak sehat, tetapi tidak otomatis menjamin container akan direstart hanya karena statusnya unhealthy.
Gunakan Restart Policy
Contoh:
restart: unless-stopped
Kebijakan ini membantu Docker menjalankan kembali container setelah kegagalan proses atau restart daemon sesuai aturan restart policy.
Namun, restart policy bukan solusi untuk bug aplikasi atau masalah dependensi.
Terapkan Logging yang Terkontrol
Log aplikasi dapat menghabiskan ruang penyimpanan jika tidak dibatasi.
Pada lingkungan yang menggunakan logging driver json-file, contoh konfigurasi rotasi log adalah:
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
Konfigurasi tersebut membatasi ukuran file log dan jumlah file rotasi per container.
Untuk server produksi dengan banyak container, pertimbangkan sentralisasi log menggunakan Grafana Loki, Fluent Bit, atau platform logging lain.
Gunakan Monitoring Terpusat
Perintah docker stats cocok untuk pemeriksaan cepat, tetapi tidak menyediakan analisis historis yang memadai.
Untuk monitoring jangka panjang, gunakan kombinasi:
- Prometheus untuk pengumpulan metrik.
- cAdvisor untuk metrik container.
- Grafana untuk dashboard.
- Loki untuk agregasi log.
- Alertmanager untuk notifikasi.
Dengan pendekatan tersebut, administrator dapat memantau tren penggunaan CPU, memori, storage, dan aktivitas aplikasi.
Lakukan Backup Secara Berkala
Backup harus mencakup data persisten dan konfigurasi aplikasi.
Untuk database, gunakan mekanisme backup yang konsisten dengan database engine, seperti logical dump atau backup fisik yang sesuai.
Jangan hanya mengandalkan penyalinan volume database yang sedang aktif tanpa memastikan konsistensi data.
Bersihkan Resource yang Tidak Digunakan
Untuk melihat penggunaan storage Docker:
docker system df
Untuk membersihkan resource yang tidak digunakan:
docker system prune
Perintah tersebut dapat menghapus stopped container, unused network, dangling image, dan build cache yang tidak digunakan.
Periksa dampaknya sebelum menjalankan pada server produksi.
Hindari penggunaan opsi --volumes tanpa audit dan backup.
Penerapan Docker dalam Pembelajaran TKJ dan DevOps
Docker juga sangat relevan digunakan sebagai media pembelajaran praktik pada kompetensi Teknik Jaringan Komputer dan Telekomunikasi (TJKT).
Melalui Docker, peserta didik dapat mempelajari deployment aplikasi tanpa harus membuat mesin virtual terpisah untuk setiap layanan.
Contoh proyek praktikum yang dapat dikembangkan meliputi:
- Menjalankan web server Nginx dan Apache menggunakan container berbeda.
- Menghubungkan aplikasi PHP dengan database MariaDB.
- Membangun aplikasi WordPress menggunakan Docker Compose.
- Mempelajari Docker Network untuk komunikasi antarkontainer.
- Mengimplementasikan volume untuk penyimpanan data.
- Melakukan troubleshooting aplikasi melalui Docker Logs.
- Membangun monitoring container menggunakan Prometheus dan Grafana.
Pendekatan Project Based Learning dapat diterapkan dengan memberikan tugas kepada peserta didik untuk membangun aplikasi multi-container, mendokumentasikan konfigurasi, dan melakukan troubleshooting berdasarkan skenario masalah.
Dengan demikian, peserta didik tidak hanya menghafal perintah Docker, tetapi juga memahami konsep deployment, jaringan, storage, keamanan, dan monitoring aplikasi modern.

Kesimpulan
Menguasai perintah Docker merupakan keterampilan penting bagi System Administrator, Linux Administrator, DevOps Engineer, dan siapa saja yang bekerja dengan infrastruktur aplikasi modern.
Dari 20 perintah yang telah dibahas, terdapat empat kemampuan utama yang perlu dikuasai: mengelola siklus hidup container, melakukan monitoring dan troubleshooting, membangun serta mengelola image, dan menjalankan aplikasi multi-container menggunakan Docker Compose.
Untuk pemula, mulailah dengan memahami docker ps, docker run, docker logs, dan docker exec.
Setelah itu, lanjutkan dengan Docker Image, Docker Network, Docker Volume, dan Docker Compose.
Bagi administrator server produksi, kemampuan menjalankan container harus dilengkapi dengan pemahaman keamanan, backup, monitoring, resource management, dan strategi deployment.
Docker bukan sekadar alat untuk menjalankan aplikasi dalam container. Docker merupakan bagian penting dari ekosistem pengembangan dan pengelolaan infrastruktur modern.
Frequently Asked Questions (FAQ)
1. Apa itu Docker Command?
Docker Command adalah perintah yang digunakan melalui terminal untuk mengelola Docker Engine, container, image, network, volume, dan berbagai resource Docker lainnya.
2. Apa perbedaan docker ps dan docker ps -a?
docker ps menampilkan container yang sedang berjalan, sedangkan docker ps -a menampilkan seluruh container, termasuk yang sudah berhenti.
3. Apa fungsi docker exec -it?
Perintah docker exec -it digunakan untuk menjalankan perintah secara interaktif di dalam container yang sedang berjalan, misalnya membuka shell untuk troubleshooting.
4. Apa perbedaan docker run dan docker start?
docker run membuat dan menjalankan container baru dari image, sedangkan docker start menjalankan kembali container yang sudah dibuat sebelumnya.
5. Apa fungsi Docker Compose?
Docker Compose digunakan untuk mendefinisikan dan mengelola aplikasi yang terdiri atas satu atau beberapa service melalui file konfigurasi YAML.
6. Apakah docker compose down menghapus data?
Secara default, docker compose down tidak menghapus named volume. Namun, data yang hanya tersimpan pada writable layer container dapat hilang ketika container dihapus. Opsi -v juga dapat menghapus named volume project.
7. Bagaimana cara melihat log container Docker?
Gunakan docker logs nama-container. Untuk memantau log secara real-time, gunakan docker logs -f nama-container.
8. Bagaimana cara mengetahui penggunaan CPU dan RAM container?
Gunakan docker stats untuk melihat penggunaan CPU, memori, dan I/O container secara langsung.
9. Apakah Docker cocok untuk server produksi?
Ya. Docker dapat digunakan pada server produksi apabila dilengkapi konfigurasi keamanan, monitoring, backup, resource limits, dan strategi deployment yang tepat.
10. Apakah Docker dapat digunakan untuk pembelajaran TKJ?
Ya. Docker sangat cocok untuk praktikum web server, database server, jaringan container, deployment aplikasi, dan pembelajaran dasar DevOps.
Sudah Siap Menguasai Docker?
Menguasai Docker bukan hanya tentang menghafal perintah terminal, tetapi memahami bagaimana aplikasi dijalankan, dipantau, diamankan, dan dikelola secara efisien.
Mulailah dengan mencoba 20 perintah Docker dalam artikel ini pada lingkungan laboratorium. Setelah memahami dasarnya, lanjutkan dengan membangun aplikasi multi-container menggunakan Docker Compose.
💬 Punya pengalaman menarik atau kendala saat menggunakan Docker? Bagikan pertanyaan dan pengalaman Anda melalui kolom komentar.
📢 Jangan lupa membagikan artikel ini kepada teman, siswa TKJ/TJKT, Linux Administrator, dan praktisi DevOps yang sedang mempelajari containerization.
📚 Jelajahi juga artikel lainnya tentang Linux Server, Docker, Kubernetes, Proxmox, Networking, Cloud Computing, dan Cybersecurity.
Ikuti konten teknologi dan tutorial terbaru melalui:
Instagram: @walidumar01
YouTube: https://youtube.com/walidumar
Terus belajar, terus bereksperimen, dan tingkatkan keterampilan administrasi server Anda!
Referensi teknis resmi untuk pembaca: Docker CLI Reference dan Docker Compose Documentation.
Dukung kami dengan Subscribe & Join Membership channel YouTube | Walid Umar
Akses video pembelajaran eksklusif, materi persiapan UKK (Uji Kompetensi Siswa) dan Penyelesaian Soal LKS ITNSA