Docker:Dockerfile的 CMD 與 ENTRYPOINT 命令區別
CMD指令和ENTRYPOINT指令的作用都是為映象指定容器啟動後的命令。
CMD
支援三種格式
CMD["executable","param1","param2"] 使用exec執行,推薦方式;
CMDcommandparam1param2 shell中執行 (/bin/sh ),提供給需要互動的應用;
CMD["param1","param2"] 注: 當Dockerfile內有ENTRYPOINT命令時,CMD命令會變成引數追加到ENTRYPOINT命令後;
指定啟動容器時執行的命令,每個Dockerfile只能有一條CMD命令。如果指定了多條命令,只有最後一條會被執行
如果使用者啟動容器時候指定了執行的命令,則會覆蓋掉CMD指定的命令。
ENTRYPOINT
兩種格式:
ENTRYPOINT["executable","param1","param2"] 使用exec執行,推薦方式;
ENTRYPOINTcommandparam1param2 shell中執行 (/bin/sh )
配置容器啟動後執行的命令,並且不可被dockerrun提供的引數覆蓋。
每個Dockerfile中只能有一個ENTRYPOINT,當指定多個時,只有最後一個起效。
差異1
CMD指令指定的容器啟動時命令可以被dockerrun指定的命令覆蓋,
ENTRYPOINT指令指定的命令不能被覆蓋,
CMD 測試
容器啟動時指定命令是否會覆蓋CMD命令輸出。
Dockerfile
FROM ubuntu:14.04 MAINTAINER [email protected] ADD startup /opt RUN chmod a+x /opt/startup CMD ["echo", "Hi"]
生成容器命令
docker run -ti --rm=true test /bin/bash -c 'echo Hello'
輸出結果 ( 會覆蓋CMD輸出結果 )
lienhua34@test$ sudo docker run -ti --rm=true test /bin/bash -c 'echo Hello' Hello
ENTRYPOINT 測試
容器啟動時指定命令是否會覆蓋ENTRYPOINT命令輸出。
Dockerfile
FROM ubuntu:14.04 MAINTAINER [email protected] ADD startup /opt RUN chmod a+x /opt/startup ENTRYPOINT ["echo", "Hi"]
生成容器命令
docker run -ti --rm=true test /bin/bash -c 'echo Hello'
輸出結果 ( 不會覆蓋ENTRYPOINT輸出結果; 並且把執行時命令當作引數拼接到ENTRYPOINT命令之後 )
lienhua34@test$ sudo docker run -ti --rm=true test /bin/bash -c 'echo Hello' Hi /bin/bash -c echo Hello
差異2
CMD與ENTRYPOINT同時存在時,CMD指令可以為ENTRYPOINT指令設定預設引數,而且CMD可以被dockerrun指定的引數覆蓋;
CMD設定引數測試
CMD與ENTRYPOINT同時存在時,CMD指令可以為ENTRYPOINT指令設定預設引數。
Dockerfile
FROM ubuntu:14.04 MAINTAINER [email protected] ADD startup /opt RUN chmod a+x /opt/startup ENTRYPOINT ["echo", "Hi"]
CMD ["jack!"]
生成容器命令
docker run -ti --rm=true test
輸出結果 ( CMD為ENTRYPOINT設定引數生效 )
lienhua34@test$ sudo docker run -ti --rm=true test Hi jack!
執行命令覆蓋測試
CMD與ENTRYPOINT同時存在時,CMD可以被dockerrun指定的引數覆蓋。
Dockerfile
FROM ubuntu:14.04 MAINTAINER [email protected] ADD startup /opt RUN chmod a+x /opt/startup ENTRYPOINT ["echo", "Hi"]
CMD ["jack!"]
生成容器命令
docker run -ti --rm=true test Mark
輸出結果 ( 不會覆蓋ENTRYPOINT輸出結果; 並且把執行時命令當作引數拼接到ENTRYPOINT命令之後 )
lienhua34@test$ sudo docker run -ti --rm=true test Mark Hi Mark
文章轉載至:https://blog.csdn.net/wuce_bai/article/details/88997725
----------------------------------- 作者:怒吼的蘿蔔 連結:http://www.cnblogs.com/nhdlb/ -----------------------------------