CMD:
這個(gè)命令是用來(lái)做什么的奸笤?查看官方文檔說(shuō)明:https://docs.docker.com/engine/reference/builder/#cmd
該指令有三種形式:
- CMD ["executable", "param1", "param2"] (exec form,優(yōu)先使用這種方式)
- CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
- CMD command param1 param2 (shell form)
cmd給出的是一個(gè)容器的默認(rèn)的可執(zhí)行體李茫。也就是容器啟動(dòng)以后揭保,默認(rèn)的執(zhí)行命令。重點(diǎn)是這個(gè)" 默認(rèn)"魄宏。意味著秸侣,如果docker run沒(méi)有指定任何的執(zhí)行命令或者dockerfile里面也沒(méi)有entrypoint,那么,就會(huì)使用cmd指定的默認(rèn)的執(zhí)行命令執(zhí)行味榛。同時(shí)也側(cè)面說(shuō)明了entrypoint的含義椭坚,它(entrypooint)才是真正的容器啟動(dòng)以后要執(zhí)行的命令。
這也是為什么很多博客文檔說(shuō)的"cmd會(huì)被覆蓋"搏色,其實(shí)為什么會(huì)覆蓋善茎?因?yàn)閏md的角色定位就是默認(rèn),如果你不額外指定频轿,那么就執(zhí)行cmd命令垂涯,否則呢?只要你指定了航邢,那么就不會(huì)執(zhí)行cmd耕赘,也就是cmd會(huì)被覆蓋。
用法3:shell form,即沒(méi)有中括號(hào)的形式膳殷,那么命令command默認(rèn)是在"/bin/sh -c"
下執(zhí)行的操骡。比如下面的dockerfile
From centos
CMD echo "hello cmd"
結(jié)果如下圖所示: