The ENTRYPOINTmenspesifikasikan perintah yang akan selalu dijalankan ketika wadah dimulai.
The CMDmenspesifikasikan argumen yang akan diumpankan ke ENTRYPOINT.
Jika Anda ingin membuat gambar yang didedikasikan untuk perintah tertentu yang akan Anda gunakan ENTRYPOINT ["/path/dedicated_command"]
Jika tidak, jika Anda ingin membuat gambar untuk tujuan umum, Anda dapat meninggalkan yang ENTRYPOINTtidak ditentukan dan menggunakannya CMD ["/path/dedicated_command"]karena Anda akan dapat menimpa pengaturan dengan memberikan argumen docker run.
Misalnya, jika Dockerfile Anda adalah:
FROM debian:wheezy
ENTRYPOINT ["/bin/ping"]
CMD ["localhost"]
Menjalankan gambar tanpa argumen apa pun akan melakukan ping ke localhost:
$ docker run -it test
PING localhost (127.0.0.1): 48 data bytes
56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.096 ms
56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.088 ms
56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.088 ms
^C--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.088/0.091/0.096/0.000 ms
Sekarang, menjalankan gambar dengan argumen akan mem-ping argumen:
$ docker run -it test google.com
PING google.com (173.194.45.70): 48 data bytes
56 bytes from 173.194.45.70: icmp_seq=0 ttl=55 time=32.583 ms
56 bytes from 173.194.45.70: icmp_seq=2 ttl=55 time=30.327 ms
56 bytes from 173.194.45.70: icmp_seq=4 ttl=55 time=46.379 ms
^C--- google.com ping statistics ---
5 packets transmitted, 3 packets received, 40% packet loss
round-trip min/avg/max/stddev = 30.327/36.430/46.379/7.095 ms
Sebagai perbandingan, jika Dockerfile Anda adalah:
FROM debian:wheezy
CMD ["/bin/ping", "localhost"]
Menjalankan gambar tanpa argumen apa pun akan melakukan ping ke localhost:
$ docker run -it test
PING localhost (127.0.0.1): 48 data bytes
56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.076 ms
56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.087 ms
56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.090 ms
^C--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.076/0.084/0.090/0.000 ms
Tetapi menjalankan gambar dengan argumen akan menjalankan argumen:
docker run -it test bash
root@e8bb7249b843:/#
Lihat artikel ini dari Brian DeHamer untuk detail lebih lanjut:
https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/