DOCKERFILE文件是用于构建 Docker 镜像的脚本文件,通过一系列的指令来定义镜像的构建步骤。其中,CMD 指令是用于指定在容器启动时要执行的命令。
CMD 指令有两种格式:Exec 格式和 Shell 格式。Exec 格式是推荐使用的格式,它支持将命令及参数作为 JSON 数组的形式进行定义,以避免不必要的 shell 字符串处理以及潜在的注入问题。
以下是 CMD 指令的用法:
1. CMD ["可执行文件", "参数1", "参数2", ...]
这种格式使用 Exec 格式,推荐使用这种方式。它会将参数传递给可执行文件,并直接执行,不需要通过 shell 去解析,可以避免一些潜在的问题。
例如:
CMD ["java", "-jar", "myapp.jar"]
这个指令会在容器启动时执行 java -jar myapp.jar 命令。
2. CMD command parameter
这种格式使用 Shell 格式,它会通过 /bin/sh -c 去解析命令,可以使用任何 Shell 内置的命令和语法。
例如:
CMD echo "Hello, Docker"
这个指令会在容器启动时执行 echo "Hello, Docker" 命令。
CMD 指令只能出现一次,如果在一个 Dockerfile 文件中出现多次,只有最后一个生效。它用于设置容器启动时的默认命令,如果在 docker run 命令中指定了要执行的命令,将会覆盖 CMD 指令。
CMD 指令的作用类似于 docker run 命令中的 --entrypoint 参数,但 CMD 指令是在 Dockerfile 中定义的,而 --entrypoint 参数是在运行容器时指定的。
在使用 CMD 指令时,可以配合使用 ENTRYPOINT 指令来定义默认执行的命令和参数,从而增加容器的灵活性。ENTRYPOINT 指令用于指定容器启动时要执行的命令,而 CMD 指令则用于指定默认执行的命令参数。
总结:
Dockerfile 的 CMD 指令用于指定容器启动时要执行的命令,默认使用 Exec 格式。它可以定义为一个可执行文件及其参数的 JSON 数组,也可以使用 Shell 格式来指定命令。CMD 指令只能出现一次,用于设置容器启动时的默认命令。可以与 ENTRYPOINT 指令配合使用来增加容器的灵活性。
声明:免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。