Dockerfile 中 CMD 指令的作用是什么?
Dockerfile 中的 CMD 指令主要用于指定容器启动时默认执行的命令。它有两种形式:shell 形式和 exec 形式。Shell 形式:CMD command param1 param2在这种形式下,CMD 指令会在 shell 中运行,通常是 /bin/sh -c。例如,CMD echo "Hello, World!" 会在容器启动时在 shell 中执行 echo "Hello, World!"。Exec 形式:CMD ["executable","param1","param2"]这种形式直接调用可执行文件,不经过 shell。这样可以避免 shell 中的某些限制,如变量扩展问题等。例如,CMD ["python", "app.py"] 会在容器启动时直接执行 python app.py 命令。一个典型的例子是在运行一个 web 服务器的容器时使用 CMD 指令。假设有一个基于 Flask 的 Python 应用程序,Dockerfile 可能看起来是这样的:FROM python:3.8COPY . /appWORKDIR /appRUN pip install -r requirements.txtEXPOSE 5000CMD ["python", "app.py"]在这个 Dockerfile 中,CMD ["python", "app.py"] 指定了当容器启动时应运行的命令。这意味着每次容器启动时,都会启动 Flask 应用程序。需要注意的是,如果通过 docker run 命令行传递了额外的参数,那么它们会覆盖 Dockerfile 中的 CMD 指令。这提供了运行时的灵活性,可以根据需要更改容器的默认行为。