Image, Container, dan CLI
Prasyarat Modul
Docker sudah terpasang dan docker run hello-world berhasil. Kalau belum, selesaikan modul instalasi dulu.
Sekarang kita masuk ke perintah yang akan kamu pakai setiap hari. Aku tidak akan menghabiskan halaman untuk daftar semua flag. Kita akan memakai satu contoh nyata, lalu membedah perintah-perintah yang muncul di sepanjang jalan.
Contoh kita: menjalankan web server Nginx di laptop sendiri.
Registry: Tempat Image Disimpan
Sebelum menjalankan apa pun, kamu perlu image. Image disimpan di registry. Registry paling umum adalah Docker Hub, tempat publik berisi ribuan image siap pakai.
Alurnya seperti ini:
- Kamu minta image ke registry dengan
docker pull. - Docker mengunduh image dan menyimpannya di komputer lokal.
- Kamu menjalankan image itu menjadi container.
Kalau kamu menjalankan docker run untuk image yang belum ada di lokal, Docker otomatis melakukan pull dulu. Jadi pull sering kali tidak perlu diketik manual.
docker pull nginxOutput-nya akan menunjukkan beberapa baris Pull complete. Setelah selesai, cek daftar image:
docker imagesKamu akan melihat kolom REPOSITORY, TAG, IMAGE ID, CREATED, dan SIZE.
Tag Itu Versi
nginx tanpa tag sama dengan nginx:latest. Di dunia nyata, hindari latest untuk produksi karena isinya bisa berubah tanpa kamu sadari. Pakai versi spesifik, misalnya nginx:1.27-alpine.
Menjalankan Container Pertama
Jalankan Nginx:
docker run -d -p 8080:80 --name web-ku nginxKalau berhasil, perintah ini hanya mengembalikan satu baris ID panjang. Tidak ada penjelasan apa pun. Mari kita bedah satu per satu:
| Bagian | Arti |
|---|---|
docker run | Buat container baru dari sebuah image, lalu jalankan |
-d | Detached, jalankan di latar belakang dan kembalikan terminal |
-p 8080:80 | Petakan port 8080 di host ke port 80 di dalam container |
--name web-ku | Beri nama container, supaya mudah dirujuk nanti |
nginx | Image yang dipakai |
Sekarang buka http://localhost:8080 di browser. Kamu akan melihat halaman selamat datang Nginx. Selamat, kamu baru saja menjalankan server tanpa install Nginx di laptopmu.
Satu image, satu container. Kalau kamu menjalankan perintah yang sama dengan port dan nama berbeda, kamu mendapat container kedua dari image yang sama, tanpa mengunduh ulang.
Soal port -p 8080:80
Urutannya selalu host:container. Angka kiri adalah pintu di komputermu, angka kanan adalah pintu di dalam container.
Nginx mendengarkan di port 80 di dalam container. Kalau kamu menulis -p 80:80, itu juga sah, asalkan port 80 di host belum dipakai. Aku memilih 8080 supaya tidak bentrok dengan server lain yang mungkin sedang jalan.
Melihat Apa yang Sedang Berjalan
docker psPerintah ini menampilkan container yang sedang hidup. Untuk melihat semua container, termasuk yang sudah mati:
docker ps -aKolom yang penting:
- CONTAINER ID: ID pendek, bisa dipakai di perintah lain.
- IMAGE: image asal container.
- STATUS:
Up 2 minutesatauExited (0) 5 minutes ago. - PORTS: pemetaan port, misalnya
0.0.0.0:8080->80/tcp. - NAMES: nama container.
Melihat Log
Container yang berjalan di latar belakang tidak menulis ke terminalmu. Untuk melihat output-nya:
docker logs web-kuKalau kamu ingin terus mengikuti log seperti tail -f:
docker logs -f web-kuTekan Ctrl+C untuk berhenti mengikuti. Ini tidak mematikan container, hanya berhenti melihat log.
Log Bisa Membengkak
Secara default, Docker menyimpan log container di disk tanpa batas. Untuk container jangka panjang, atur rotasi log lewat opsi --log-opt. Ini hal kecil yang sering dilupakan sampai disk server penuh.
Masuk ke Dalam Container
Kadang kamu perlu melihat isi container dari dalam, misalnya untuk cek file konfigurasi. Perintahnya:
docker exec -it web-ku shPenjelasannya:
execmenjalankan perintah baru di container yang sudah berjalan.-imenjaga input tetap terbuka.-tmemberi terminal interaktif.shadalah shell yang dijalankan. Image Alpine biasanya tidak punyabash, jadishlebih aman.
Setelah masuk, coba:
ls /usr/share/nginx/html
cat /etc/nginx/nginx.conf
exitKamu sedang berada di dalam file system container, terpisah dari file system laptopmu.
Siklus Hidup Container
Container punya status yang jelas. Memahami ini membuat perintah CLI terasa masuk akal.
docker run -> membuat + menjalankan container baru
docker stop -> menghentikan container yang berjalan
docker start -> menjalankan lagi container yang berhenti
docker restart -> stop lalu start
docker rm -> menghapus containerYang sering membingungkan: docker run selalu membuat container baru, sedangkan docker start memakai container lama yang sudah ada.
Kalau kamu menjalankan docker run nginx lima kali, kamu punya lima container. Kalau kamu docker start web-ku lima kali, kamu tetap punya satu container.
Berhenti dan menghapus
docker stop web-ku
docker rm web-kuKalau container masih berjalan, docker rm akan menolak. Hentikan dulu, atau paksa dengan -f (hati-hati, ini mematikan paksa).
Hapus image
docker rmi nginxImage tidak bisa dihapus kalau masih dipakai container, bahkan container yang sedang berhenti. Hapus container-nya dulu.
Container Sekali Pakai
Untuk eksperimen, kamu tidak ingin meninggalkan sampah. Dua flag ini sangat berguna:
docker run --rm -it alpine sh--rmotomatis menghapus container begitu prosesnya selesai.-itmemberi shell interaktif.
Coba jalankan, lalu exit. Container langsung hilang dari docker ps -a.
Kebiasaan yang Baik
Biasakan memakai --rm untuk container yang sifatnya sementara: uji coba, menjalankan script, atau masuk ke shell. Ini menjaga daftar container tetap bersih.
Melihat Detail Container
Untuk informasi lengkap dalam format JSON:
docker inspect web-kuOutput-nya panjang. Kalau kamu hanya butuh satu bagian, gunakan --format:
docker inspect --format '{{.State.Status}}' web-ku
docker inspect --format '{{.NetworkSettings.IPAddress}}' web-kuUntuk melihat pemakaian CPU dan RAM secara langsung:
docker statsMembersihkan Sampah
Setelah beberapa hari bereksperimen, biasanya menumpuk image dan container yang tidak terpakai. Cek dulu pemakaian disk:
docker system dfLalu bersihkan yang benar-benar tidak terpakai:
docker system prunePerintah Ini Menghapus Data
docker system prune menghapus container yang berhenti, network yang tidak dipakai, dan image dangling. Kalau kamu menambahkan -a, semua image yang tidak dipakai container ikut terhapus. Jangan jalankan ini di server produksi tanpa tahu isinya.
Latihan
- Jalankan Nginx di port 8081 dengan nama
latihan-nginx. - Buka di browser dan pastikan halamannya muncul.
- Lihat log-nya, lalu masuk ke dalam container dan cari file
index.html. - Hentikan container, lalu jalankan lagi dengan
docker start. Apakah konfigurasi port-nya tetap sama? - Hapus container dan image Nginx yang kamu pakai.
- Tantangan: jalankan image
alpinedengan--rm, lalu cetak isi file/etc/os-releasetanpa masuk ke shell interaktif. Petunjuk:docker run --rm alpine cat /etc/os-release.
