Penamaan dan Detaching

Nama container dengan --name, mode -d, serta perintah siklus hidup ps, stop, start, dan rm.

Daftar isi

Topik ini membahas penamaan container dan cara menjalankannya tanpa menahan terminal. Pembahasan mencakup opsi --name, mode detached dengan -d, pembacaan keluaran melalui docker logs, perbedaan docker ps dan docker ps -a, serta perintah siklus hidup stop, start, restart, dan rm. Setelah membacanya, container dapat dikelola sebagai objek bernama yang mudah dirujuk, bukan deretan nama acak yang sulit dilacak.

Nama container yang stabil#

Apabila --name tidak diberikan, Docker memberi container nama acak bergaya kata sifat diikuti nama ilmuwan yang dipisah garis bawah. Nama semacam itu unik dan tidak membahayakan, tetapi tidak menyampaikan apa pun tentang peran container tersebut. Pada host, yaitu mesin tempat Docker berjalan, menebak container mana yang memuat aplikasi catatan dari sekadar nama acak adalah pekerjaan yang tidak perlu.

Opsi --name menetapkan nama secara sengaja, misalnya --name catatan-app untuk container aplikasi catatan. Nama ini menjadi rujukan yang lebih nyaman dibaca daripada pengenal heksadesimal, baik pada docker logs, docker stop, maupun docker rm. Nama container harus unik pada satu host, dan Docker menampilkan pesan error apabila nama yang diminta sudah dipakai container lain, termasuk container yang sudah berhenti tetapi belum dihapus.

Menjalankan di latar dengan -d#

Tanpa opsi tambahan, docker run berjalan dalam mode terpasang (attached), yaitu terminal menempel pada container dan keluarannya mengalir ke layar. Terminal terkunci selama itu, dan menekan Ctrl-C ikut menghentikan proses utama container. Mode ini cocok untuk uji coba singkat yang keluarannya memang ingin disaksikan langsung.

Opsi -d menjalankan container dalam mode detach, yaitu berjalan di latar sementara kendali terminal langsung kembali. Container tetap berjalan setelah perintah selesai, dan keluarannya terkumpul di dalam Docker untuk dibaca belakangan. Perintah docker logs nama-container menampilkan keluaran yang terkumpul, sedangkan opsi -f pada perintah yang sama mengikuti keluaran baru secara langsung sampai dihentikan dengan Ctrl-C.

bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# jalankan container di latar dengan nama tetap
docker run -d --name catatan-app catatan
# tampilkan keluaran yang terkumpul
docker logs catatan-app
# ikuti keluaran baru secara langsung
docker logs -f catatan-app

Menampilkan daftar container#

Perintah docker ps menampilkan container yang sedang berjalan, sedangkan docker ps -a menampilkan semua container, termasuk yang sudah berhenti. Container yang berhenti tetap terdaftar sampai dihapus, sehingga docker ps -a menjadi tempat pemeriksaan pertama ketika sebuah container langsung berhenti sebelum sempat diamati. Kolom-kolom utamanya adalah sebagai berikut.

KolomIsi
CONTAINER IDPengenal pendek yang dihasilkan acak untuk container
IMAGEImage tempat container dibuat
STATUSLama container berjalan, atau kode keluar beserta waktunya bila sudah berhenti
NAMESNama container, berupa nama acak bila --name tidak diberikan

Kolom STATUS membedakan container yang sehat dari yang bermasalah. Status berupa lama berjalan menandakan container hidup, sedangkan status berupa kode keluar menunjukkan container sudah berhenti beserta kode yang ditinggalkan prosesnya. Kode keluar 0 menyatakan berhenti secara normal, sedangkan kode lain menandakan kegagalan yang perlu ditelusuri melalui log.

bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
# hanya container yang berjalan
docker ps
# semua container, termasuk yang berhenti
docker ps -a

Siklus hidup dan pembersihan#

Pengelolaan harian container adalah perputaran keadaan yang sama, yaitu dibuat, dijalankan, dihentikan, dan dihapus. Urutan berikut memperagakan perputaran itu pada satu container bernama.

  1. Buat dan jalankan container di latar dengan docker run -d.
  2. Amati keadaannya melalui docker ps.
  3. Hentikan dengan docker stop, lalu pastikan keadaan barunya lewat docker ps -a.
  4. Jalankan kembali dengan docker start tanpa mengulang konfigurasinya.
  5. Hapus dengan docker rm setelah container berhenti.
bash
# tidak-dijalankan: daemon Docker tidak tersedia di sandbox
docker run -d --name catatan-app catatan
# hentikan proses utama secara rapi
docker stop catatan-app
# jalankan kembali container yang sama
docker start catatan-app
# hentikan lalu jalankan lagi dalam satu perintah
docker restart catatan-app
docker stop catatan-app
# hapus container yang sudah berhenti
docker rm catatan-app
PerintahEfek pada container
docker stopMenghentikan proses utama secara rapi, container dan konfigurasinya tetap tersimpan
docker startMenjalankan kembali container yang berhenti dengan konfigurasi yang sama
docker restartMenggabungkan stop dan start dalam satu perintah
docker rmMenghapus container beserta seluruh data yang ditulis selama berjalan

docker stop mengirim sinyal permintaan berhenti ke proses utama, lalu menunggu selama masa tenggang sebelum memaksa penghentian. Masa tenggang bawaannya sekitar 10 detik, dan proses yang menolak berhenti tetap dipaksa setelah masa itu lewat. Sebaliknya, docker start tidak mengulang konfigurasi apa pun, sehingga pemetaan port dan variabel lingkungan dari saat docker run tetap berlaku.

Container sekali pakai lebih praktis dibuat dengan --rm pada docker run. Opsi ini menghapus container secara otomatis tepat setelah prosesnya selesai, sehingga docker ps -a tidak menumpuk sisa container uji coba. Pola ini cocok untuk perintah utilitas yang dijalankan berkala dan tidak menyimpan keadaan apa pun.

Ringkasan#

  • --name menetapkan nama tetap dan unik sebagai pengganti nama acak bawaan, dan nama itu menjadi rujukan untuk semua perintah lanjutan.
  • -d menjalankan container di latar, sedangkan docker logs membaca keluaran yang dikirim aplikasi ke stdout dan stderr.
  • docker ps menampilkan container yang berjalan, sedangkan docker ps -a menampilkan semuanya beserta kode keluar container yang berhenti.
  • stop, start, dan restart mengatur keadaan container yang sama, sedangkan rm menghapusnya permanen dan --rm otomatis menghapus container sekali pakai.

Referensi#