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