1. 在Dockerfile中,有些指令(如RUN,ENTRYPOINT和CMD指令)的定义,可以采用Shell格式,也可以采用JSON格式。
1) 采用Shell格式定义,示例如下:
CMD top -b
2) 采用JSON格式定义,示例如下:
CMD ["top", "-b"]
2. Dockerfile中的SHELL指令
Dockerfile中的SHELL指令用以设置Shell风格下使用的Shell的特性,覆盖默认特性。Shell风格的改变将会影响到所有使用该风格定义的Dockerfile指令,主要是RUN,ENTRYPOINT和CMD。用法如下:
SHELL ["executable", "parameters"]
在Linux系统的镜像中,默认SHELL指令如下:
SHELL ["/bin/sh", "-c"]
SHELL ["cmd", "/S", "/C"]
SHELL ["powershell", "-command"]
SHELL ["/bin/tcsh", "-c"]
3.Windows镜像示例
由于Windows系统的镜像中,默认SHELL指令为SHELL ["cmd", "/S"", "/C"]
所以:
RUN powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"
默认等价于
cmd /S /C powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"
RUN ["powershell", "-command", "Execute-MyCmdlet", "-param1 \"c:\\foo.txt\""]
才默认等价于
powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"
只有在重新定义SHELL如下:
SHELL ["powershell", "-command"]
RUN Execute-MyCmdlet -param1 "c:\foo.txt"
才等价于
powershell -command Execute-MyCmdlet -param1 "c:\foo.txt"
参考链接:
https://docs.docker.com/engine/reference/builder/