Docker中CMD和ENTRYPOINT的區(qū)別是什么

小億
113
2023-08-03 10:48:30

在Docker中,CMD和ENTRYPOINT是兩種不同的指令,用于指定在容器啟動(dòng)時(shí)要執(zhí)行的命令。

CMD指令用于為容器指定默認(rèn)的執(zhí)行命令。它可以有多種不同的格式:

  • CMD [“executable”,“param1”,“param2”]:以JSON數(shù)組的形式指定要執(zhí)行的命令及其參數(shù)。這種格式中,CMD會(huì)被解析為一個(gè)單獨(dú)的命令,如果用戶指定了其他的命令,將會(huì)覆蓋CMD。

  • CMD command param1 param2:以默認(rèn)的shell格式指定要執(zhí)行的命令。這種格式下,CMD會(huì)被解析為一個(gè)命令行,如果用戶指定了其他的命令,將會(huì)覆蓋CMD。

ENTRYPOINT指令用于將容器作為可執(zhí)行程序運(yùn)行。它也可以有多種不同的格式:

  • ENTRYPOINT [“executable”, “param1”, “param2”]:以JSON數(shù)組的形式指定要作為可執(zhí)行程序運(yùn)行的命令及其參數(shù)。這種格式下,ENTRYPOINT會(huì)被解析為一個(gè)單獨(dú)的命令,如果用戶指定了其他的命令,將會(huì)覆蓋ENTRYPOINT。

  • ENTRYPOINT command param1 param2:以默認(rèn)的shell格式指定要作為可執(zhí)行程序運(yùn)行的命令。這種格式下,ENTRYPOINT會(huì)被解析為一個(gè)命令行,如果用戶指定了其他的命令,將會(huì)覆蓋ENTRYPOINT。

區(qū)別:

  • CMD是為了提供默認(rèn)值,如果用戶在運(yùn)行容器時(shí)指定了其他的命令,則會(huì)覆蓋CMD。而ENTRYPOINT是要將容器作為可執(zhí)行程序運(yùn)行,用戶無(wú)法覆蓋ENTRYPOINT。

  • 如果在Dockerfile中同時(shí)使用了CMD和ENTRYPOINT,CMD的內(nèi)容會(huì)作為ENTRYPOINT的參數(shù)。即CMD指定的命令及參數(shù)會(huì)被添加到ENTRYPOINT指定的命令之后。

總結(jié):CMD用于指定默認(rèn)的執(zhí)行命令,而ENTRYPOINT用于將容器作為可執(zhí)行程序運(yùn)行,并且可以與CMD結(jié)合使用。

0