Pendahuluan
Artikel ini bertujuan untuk memberikan pemahaman tentang dua instruksi Dockerfile yang penting - CMD
dan ENTRYPOINT
.
CMD
CMD
, singkatan dari Command, adalah instruksi Dockerfile yang memungkinkan Anda untuk menetapkan perintah default yang akan dieksekusi ketika sebuah kontainer dijalankan dari gambar yang dihasilkan. Perintah ini dapat digantikan dengan menyediakan perintah yang berbeda saat runtime. CMD
berguna untuk memberikan perilaku default atau parameter tambahan untuk kontainer Anda.
Sintaks
CMD ["executable", "param1", "param2"]
atau
CMD command param1 param2
Contoh
FROM ubuntu
CMD ["echo", "Hello, World!"]
Dalam contoh ini, perintah default untuk kontainer adalah echo "Hello, World!"
. Ketika kontainer dijalankan, perintah ini akan dieksekusi kecuali perintah yang berbeda ditentukan saat runtime.
ENTRYPOINT
ENTRYPOINT
adalah instruksi Dockerfile lain yang menentukan executable default untuk sebuah kontainer. Berbeda dengan CMD
, ENTRYPOINT
tidak memungkinkan perintah untuk mudah digantikan saat runtime. Sebaliknya, semua argumen tambahan yang disediakan saat runtime akan ditambahkan ke perintah ENTRYPOINT
. Hal ini membuat ENTRYPOINT
sangat berguna ketika Anda ingin menetapkan executable atau aplikasi yang spesifik untuk dijalankan di dalam kontainer.
Sintaks
ENTRYPOINT ["executable", "param1", "param2"]
atau
ENTRYPOINT command param1 param2
Example
FROM ubuntu
ENTRYPOINT ["tail", "-f", "/dev/null"]
Dalam contoh ini, perintah ENTRYPOINT
memastikan bahwa kontainer selalu menjalankan perintah tail
dengan parameter -f
dan /dev/null
. Semua parameter tambahan yang diteruskan saat runtime akan ditambahkan ke perintah ini.
Perbedaan Utama
-
Overriding behavior
CMD
dapat dengan mudah digantikan dengan menyediakan perintah baru saat runtime, sementaraENTRYPOINT
dirancang untuk menetapkan executable yang spesifik, dengan argumen runtime tambahan yang ditambahkan ke perintah. -
Fleksibilitas
CMD
lebih fleksibel bagi pengguna, memungkinkan mereka untuk menentukan atau mengubah perilaku default dari kontainer saat runtime, sementaraENTRYPOINT
lebih kaku, menetapkan aplikasi atau executable yang spesifik. -
Penggunaan yang Dimaksudkan
CMD
paling cocok untuk menyediakan perilaku default atau parameter tambahan, sementaraENTRYPOINT
ideal untuk memastikan bahwa aplikasi tertentu selalu dieksekusi dalam kontainer.
Menggunakan CMD dan ENTRYPOINT Bersama-sama
CMD
dan ENTRYPOINT
dapat digunakan bersama-sama untuk membuat konfigurasi kontainer yang serbaguna dan kuat. Ketika digabungkan, ENTRYPOINT
menetkan executable default, sedangkan CMD
memberikan argumen default yang dapat digantikan saat runtime.
FROM python:3.8
ENTRYPOINT ["python", "app.py"]
CMD ["--host", "0.0.0.0", "--port", "8000"]
Dalam contoh ini, ENTRYPOINT
menentukan bahwa executable python harus digunakan untuk menjalankan skrip app.py
. Instruksi CMD
kemudian memberikan argumen default untuk kontainer, menetapkan host ke 0.0.0.0
dan port ke 8000
. Ketika kontainer dijalankan, semua argumen tambahan yang disediakan saat runtime akan menggantikan argumen default dari CMD
.