gpt4 book ai didi

docker - 是否可以在 Kubernetes 创建 pod 时指定 Docker 镜像构建参数?

转载 作者:行者123 更新时间:2023-12-02 20:06:22 24 4
gpt4 key购买 nike

我有一个基于 Node.JS 的应用程序,由三个服务组成。一个是 Web 应用程序,两个是内部 API。 Web 应用程序需要与 API 对话才能完成工作,但我不想将其他服务的 IP 地址和端口硬编码到代码库中。

在我的本地环境中,我正在使用漂亮的 envify Node.JS 模块来解决这个问题。基本上,我可以假装在编写代码时可以访问环境变量,然后使用 envify CLI 工具将这些变量转换为最终浏览器化文件中的硬编码字符串。

我想将此解决方案容器化并将其部署到 Kubernetes。这是我遇到问题的地方...

我定义了几个 ARG我的 Docker 镜像模板中的变量。这些通过 RUN export FOO=${FOO} 变成环境变量,并在运行 npm run-script build 之后我有我需要的容器。好的,所以我可以运行:

docker build . -t residentmario/my_foo_app:latest --build-arg FOO=localhost:9000 BAR=localhost:3000

然后使用 docker push 将其推送到注册表.

我对这种方法的疑虑是,我只成功地将硬编码变量添加到容器图像中。我真正想要的是在 pod 初始化时定义路径。这可能吗?

最佳答案

编辑 : 这里有两个解决方案。

启动后

Kubernetes 带有一个名为 PostStart 的生命周期 Hook 。 .这在“Container Lifecycle Hooks ”中有简要描述。

一旦容器到达 ContainerCreated,这个钩子(Hook)就会触发。状态,例如容器已完成拉动并已完全初始化。然后,您可以使用钩子(Hook)跳转到容器中并运行任意命令。

在我们的例子中,我可以创建一个 PostStart事件,当触发时,使用正确的路径重建应用程序。

除非您创建了一个实际上不运行任何东西的 Docker 镜像(这对我来说似乎是错误的,但如果这被认为是一种好的做法,请告诉我),这确实需要一些重复的工作:停止应用程序,重新运行构建过程,以及再次启动应用程序。

命令

根据下面的评论,此事件不一定会在正确的时间触发。这是另一种保证工作(因此更优越)的方法。

一个有用的 Docker 容器以 CMD 上的一些变体结尾为应用程序服务。您可以在 Kubernetes 中覆盖此运行命令,如 "Define a Command and Arguments for a Container" 中所述。文档的部分。

所以我加了一个 command到运行 shell 脚本的 pod 定义,该脚本 (1) 使用正确的路径重建应用程序,作为环境变量提供给 pod 并 (2) 开始为应用程序提供服务:

command: ["/bin/sh"]
args: ["./scripts/build.sh"]

像魅力一样工作。

关于docker - 是否可以在 Kubernetes 创建 pod 时指定 Docker 镜像构建参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49216545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com