拉不拉稀肚拉稀 发表于 2024-8-26 23:07:46

深入相识Docker中Dockerfile文件的ENTRYPOINT

https://i-blog.csdnimg.cn/blog_migrate/01630366104b97b0727e596932e22d43.png

ENTRYPOINT 是 Docker 最重要的配置选项之一。它位于 Dockerfile 中,答应你指定容器的默认行为。这一功能使得 ENTRYPOINT 对于在运行时自动实行容器的行为非常有帮助。
本文将深入探讨 ENTRYPOINT 在 Docker 中的使用,包括它的工作原理、为什么它必不可少以及如何正确配置它。
Docker ENTRYPOINT 解读

ENTRYPOINT 是 Docker 容器运行过程的出发点。创建 Docker 镜像并将其实例化为容器时,默认情况下会实行 ENTRYPOINT 下令。
ENTRYPOINT 答应你设置容器的重要用途,如运行网络服务器、数据库或应用程序。它还答应你在运行时传递参数,自定义容器的行为。
ENTRYPOINT 的语法和用法

在 Dockerfile 中定义 ENTRYPOINT 的两种语法选项是 shell 形式和实行形式。这两种方法都需要在 Dockerfile 中插入一行。由于 ENTRYPOINT 配置并不直接影响构建过程,因此你可以把它放在文件的任何地方。不过,大多数程序员倾向于将 ENTRYPOINT 下令放在最后。
Shell 表单语法

当 ENTRYPOINT 使用 shell 形式运行时,它会调用下令 shell 进行处置惩罚。这种方法包括情况变量替换,但阻止了在实行形式中追加参数的功能:
ENTRYPOINT command param1 param2 这里,command 是在容器启动时实行的重要下令。 param1 和 param2 是该下令的参数。
Exec 表单语法

Exec 表单不会调用下令 shell。相反,它会直接实行指定的下令和参数。这种方法答应你通过 CMD 或运行时下令行添加参数:
ENTRYPOINT ["executable", "param1", "param2"] 这里,executable 是主下令, param1 和 param2 是可实行文件的参数。
动作中的 ENTRYPOINT

让我们为 Dockerfile 组建一个简单的 ENTRYPOINT 下令,看看它是如何工作的。在不启动容器的情况下无法测试它,因为它的指令是在运行时而不是在构建时处置惩罚的。
下面是一个使用实行形式的示例:
ENTRYPOINT ["python", "app.py"] 当容器启动时,它会启动 Python 表明器并实行 app.py 脚本,作为容器的默认行为。
要使用 shell 表单重复此示例,需要稍作改动:
ENTRYPOINT python app.py 本例从 shell 下令启动 Python 表明器,而不是直接运行它。
使用 CMD 的 ENTRYPOINT

CMD 是一条 Dockerfile 指令,为正在实行的容器提供默认参数。这些参数可以是可实行下令的形式,也可以作为 ENTRYPOINT 指令的附加参数。启动容器时,你可以通过向 docker run 指令提供参数来覆盖这些参数。
与 ENTRYPOINT 一样,你也可以以 exec 或 shell 的形式编写 CMD 。重要区别在于, CMD 设置了默认下令或参数,你可以在下令行中覆盖它们。而 ENTRYPOINT 会将容器配置为可实行文件运行,这意味着你无法在下令行中覆盖下令。
你可以使用 CMD 扩展 ENTRYPOINT 的功能,让你的映像具有更大的机动性。将二者结合起来,你就可以自定义映像的行为,并将 CMD 值作为 ENTRYPOINT 指令的默认参数。通过这种方法,您可以通过 ENTRYPOINT 设置默认下令,并通过 CMD 设置默认参数。
与单独使用 ENTRYPOINT 不同,这种方法答应你覆盖在  docker run 指令时传递的参数。
为了使上述示例更加机动,你可以参加 CMD 下令:
ENTRYPOINT ["python", "app.py"]

CMD ["--help"] 在本例中,启动 Docker 容器时不提供任何下令行参数,这意味着 python app.py --help 将默认实行。不过,在启动容器时提供参数(如 docker run <image> --version )将取代默认的 CMD 参数,从而实行 python app.py--version 。这种方法让你在运行容器时有更大的机动性。
Docker 中的 ENTRYPOINT 使用案例

ENTRYPOINT 最常见的用途是为特定应用程序或服务设置镜像。例如,如果创建运行 Python 应用程序的映像,就可以使用 ENTRYPOINT 来指定运行 Python 表明器。
在为持续集成和持续部署(CI/CD)管道构建 Docker 映像时,也可以使用 ENTRYPOINT 。您可以使用这些映像来封装每个阶段所需的情况,以确保一致性。例如,你可以创建一个将 ENTRYPOINT 设置为测试脚本的 Docker 镜像。该镜像每次运行时都会自动实行这些测试,从而提供一致、可重复的测试情况。
ENTRYPOINT 对于调试容器化应用程序也很有用。通过使用 ENTRYPOINT 启动 shell 会话,你可以与容器内的应用情况进行交互。这些交互包括实行下令、查看文件和查抄应用程序的状态。一旦问题得到解决,就可以使用相应的 ENTRYPOINT 重建 Docker 镜像来运行应用程序。
如何覆盖 ENTRYPOINT

为了增加机动性,我们可以在运行时覆盖 Docker 镜像的 ENTRYPOINT 。你可以在 docker run 下令中的映像名称后面提供一个下令来实现这一点。
例如,如果你的映像的 ENTRYPOINT 是 Python 脚本,但你想在容器内打开一个 shell,你可以运行下面的下令:
docker run --entrypoint <image> “/bin/bash” 该脚本会覆盖应用程序的默认 ENTRYPOINT ,并启动一个 bash shell。
同样,要运行不同的 Python 脚本,也可以提供该脚本作为下令。这种方法让你可以机动地使用与 Dockerfile 的 ENTRYPOINT 中最初描述的参数不同的参数来运行容器。
在 Docker 中使用 ENTRYPOINT 的最佳实践

因为 ENTRYPOINT 是 Docker 的关键下令,所以必须遵循这些最佳实践来最大限度地利用它。
让容器专注于单一责任

ENTRYPOINT 指定了 Docker 容器的职责。与微服务一样,每个容器应专注于单一职责、服务或应用程序的一部分。这种方法提高了应用程序的模块性和可扩展性,使其更易于开发、测试和维护。
确保 ENTRYPOINT 脚本可实行且格式正确

使 ENTRYPOINT 脚本可实行且格式正确,可以防止出现语法和权限错误等问题。
要确保 ENTRYPOINT 脚本可实行,可以使用以下 RUN chmod +x 指令:
COPY entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"] 本例将 entrypoint.sh 脚本复制到容器中,并使用 RUN chmod +x 指令使其可实行。然后定义 ENTRYPOINT 以使用 entrypoint.sh 脚本。
你还可以使用 ShellCheck 如许的内部程序来查抄脚本的语法和样式,以确保格式正确。
克制在 ENTRYPOINT 脚本中硬编码值

使用情况变量或下令行参数而不是硬编码可以让你的脚本更机动。它还能让你在容器外部配置文件路径。
例如,在 ENTRYPOINT 脚本中,你可以如许来代替硬编码文件路径:
#!/bin/bash

echo "Starting my application..."

./my-app -f /path/to/my/file.txt 您可以使用如许的变量:
#!/bin/bash

echo "Starting my application..."

./my-app -f "${MY_FILE}" 使用变量能让你的镜像具有更强的即时定制能力,让你在不重写 Dockerfile 的情况下做更多变乱。
小结

ENTRYPOINT 是配置 Docker 容器的重要工具。它设置了容器从映像启动时实行的默认下令,定义了容器的重要功能。你可以使用 ENTRYPOINT 运行特定的应用程序,在 CI/CD 管道中提供帮助,或与 CMD 结合使用以获得更机动的容器行为。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 深入相识Docker中Dockerfile文件的ENTRYPOINT