ENTRYPOINTनिर्दिष्ट एक आदेश है कि हमेशा जब कंटेनर शुरू होता है निष्पादित किया जाएगा।
CMDनिर्दिष्ट तर्क को खिलाया जा जाएगा ENTRYPOINT।
यदि आप किसी विशिष्ट कमांड के लिए एक छवि समर्पित करना चाहते हैं जो आप उपयोग करेंगे ENTRYPOINT ["/path/dedicated_command"]
अन्यथा, यदि आप सामान्य उद्देश्य के लिए एक छवि बनाना चाहते हैं, तो आप ENTRYPOINTअनिर्दिष्ट छोड़ सकते हैं और उपयोग कर सकते हैं CMD ["/path/dedicated_command"]क्योंकि आप तर्क की आपूर्ति करके सेटिंग को ओवरराइड कर पाएंगे docker run।
उदाहरण के लिए, यदि आपका डॉकरीफाइल है:
FROM debian:wheezy
ENTRYPOINT ["/bin/ping"]
CMD ["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
अब, एक तर्क के साथ छवि को चलाने से तर्क पिंग होगा:
$ 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
तुलना के लिए, यदि आपका डॉकफाइल है:
FROM debian:wheezy
CMD ["/bin/ping", "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
लेकिन छवि को तर्क के साथ चलाने से तर्क चलेगा:
docker run -it test bash
root@e8bb7249b843:/#
और भी अधिक विवरणों के लिए ब्रायन डे वोनर के इस लेख को देखें:
https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/