本篇內(nèi)容介紹了“CMD和ENTRYPOINT怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為商南等服務(wù)建站,商南等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為商南企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
CMD指令有三種形式:
CMD ["executable","param1","param2"]
(exec形式,這是優(yōu)先形式)
CMD ["param1","param2"]
(作為ENTRYPOINT的默認參數(shù))
CMD command param1 param2
(shell 形式)
Dockerfile中只能有一條CMD指令。如果存在多個CMD,那么只有最后一個CMD才會生效。
CMD的主要目的是為正在執(zhí)行的容器提供默認值。這些默認值可以包括可執(zhí)行文件,也可以省略可執(zhí)行文件。省略可執(zhí)行文件時必須指定ENTRYPOINT指令。
備注:如果CMD用于為ENTRYPOINT指令提供默認參數(shù),則CMD和ENTRYPOINT指令都應(yīng)該使用JSON數(shù)組格式指定。
備注:exec形式會被解析為JSON數(shù)組,這意味著必須對單詞使用雙引號,而不是單引號。
備注:與shell形式不同,exec形式不調(diào)用命令shell。這意味著正常的shell處理不會生效。例如,CMD ["echo", "$HOME"]不會對$HOME執(zhí)行變量替換。如果想要shell處理生效,要么使用shell形式,要么直接執(zhí)行shell,例如:CMD [ "sh", "-c", "echo $HOME" ]。當使用exec形式并直接執(zhí)行shell時,就像shell形式一樣,執(zhí)行環(huán)境變量擴展的是shell,而不是docker。
在使用shell或exec格式時,CMD設(shè)置了運行鏡像時要執(zhí)行的命令。
如果使用CMD的shell形式,那么<命令>將在/bin/sh -c中執(zhí)行:
FROM ubuntu CMD echo "This is a test." | wc -
如果不想在shell的形式下運行
FROM ubuntu CMD ["/usr/bin/wc","--help"]
如果希望容器每次運行相同的可執(zhí)行文件,那么應(yīng)該考慮將ENTRYPOINT與CMD結(jié)合使用。
如果用戶指定docker run的參數(shù),那么CMD中指定的默認值將被run的參數(shù)覆蓋。
備注:不要將RUN與CMD混淆。RUN實際運行一個命令并提交結(jié)果;CMD在構(gòu)建時不執(zhí)行任何操作,但為鏡像指定預(yù)期的命令。
ENTRYPOINT有兩種形式:
ENTRYPOINT ["executable", "param1", "param2"]
(exec 形式,這是優(yōu)先形式)
ENTRYPOINT command param1 param2
(shell 形式)
ENTRYPOINT允許您配置將作為可執(zhí)行文件運行的容器。
“CMD和ENTRYPOINT怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!