Dockerfile文件ADD指令是用于指定默認的容器主進程的啟動命令。Docker 不是虛擬機,容器就是進程。既然是進程,那么在啟動容器的時候,需要指定所運行的程序及參數(shù)。
語法格式
shell 格式:CMD 命令
exec 格式:CMD [可執(zhí)行文件, 參數(shù)1, 參數(shù)2...]
參數(shù)列表格式:CMD [參數(shù)1, 參數(shù)2...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具體的參數(shù)。
docker在運行時可以指定新的命令來替代鏡像設置中的這個默認命令,比如,ubuntu 鏡像默認的 CMD 是 /bin/bash,如果我們直接 docker run -it ubuntu 的話,會直接進入 bash。我們也可以在運行時指定運行別的命令,如 docker run -it ubuntu cat /etc/os-release。這就是用 cat /etc/os-release 命令替換了默認的 /bin/bash 命令了,輸出了系統(tǒng)版本信息。
在指令格式上,一般推薦使用 exec 格式,這類格式在解析時會被解析為 JSON 數(shù)組,因此一定要使用雙引號 ,而不要使用單引號。
如果使用 shell 格式的話,實際的命令會被包裝為 sh -c 的參數(shù)的形式進行執(zhí)行。比如:
CMD echo $HOME
在實際執(zhí)行中,會將其變更為:
CMD [ sh, -c, echo $HOME ]
這就是為什么我們可以使用環(huán)境變量的原因,因為這些環(huán)境變量會被 shell 進行解析處理。