SHELL和CMD都是Dockerfile中的关键字,但它们有不同的作用:
- SHELL:定义Shell解释器
在Dockerfile中,使用SHELL指令来定义容器内的Shell解释器。例如,使用Bash作为容器的默认Shell:
FROM ubuntu
SHELL ["/bin/bash", "-c"]
...
在这个例子中,将使用Bash作为SHELL,并且执行命令时将使用“-c”选项。
- CMD:定义容器启动时运行的命令
在Dockerfile中,使用CMD指令来定义容器启动时运行的命令。例如,指定容器启动时运行一个Python脚本:
FROM python:3.8-slim-buster
COPY app.py /
CMD ["python3", "-u", "app.py"]
在这个例子中,将复制app.py到容器根目录,并在容器启动时运行Python解释器来执行该脚本。
总之,SHELL用于定义Docker容器中的Shell解释器,而CMD用于定义容器启动时要运行的命令。