1. 程式人生 > 其它 >Docker:Dockerfile的 CMD 與 ENTRYPOINT 命令區別

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指令指定的命令不能被覆蓋,

而是將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/ -----------------------------------