我想构建一个 Docker 容器,然后在从 GCE 永久磁盘 (PD) 挂载一些目录后在 GKE 中运行它。例如,我希望应用程序的(读写)配置文件/etc/<application>/
比它的 pod 寿命更长(它可能随时重新启动。)
常规构建将默认配置文件放入/etc/<application>/
其中,并且必须以某种方式将这些文件从映像的临时磁盘“复制”一次到 PD 中,以便应用程序可以在其预期的环境中启动。
是否有实现这一目标的最佳实践?例如,我是否必须在我的 PD 中也挂载 PD Dockerfile
,或者我是否可以在部署期间首次由 VM 实例挂载 PD 时以某种方式请求将 PD 与来自另一个目录/卷/磁盘的文件“同步”?
显而易见的答案是在创建后立即填充每个永久磁盘。
如果应用程序的配置在构建之间发生变化,并且它们必须与正在运行的构建相匹配,那么如果多个应用程序版本共享相同的 PD 并且应该存储在那里的内容发生冲突,那么就会出现一个未解决的问题。
如果你不需要担心跨版本的 PD 共享,那么你可以使用在应用程序的 pod 中运行的作业来初始化 PD 的内容。Kubernetes 有一个称为init 容器的功能,旨在使这更容易;但在撰写本文时它仍然是 Alpha 版。
我没有听说过最佳实践,所以这是我现在采用的:
docker build
在完成其他构建步骤之后,带有该图像的图像也会变成Dockerfile
焦油/etc/<application>/
<application>.tar
docker run
中的映像和scp
tar 文件scp
tar 文件到 VM 实例;gcloud compute ssh
进入tit,挂载PD,并在挂载点下解压所需文件