【问题标题】:Deploy containers in pod using docker compose volumes使用 docker compose volumes 在 pod 中部署容器
【发布时间】:2021-12-19 05:52:40
【问题描述】:
我得到了一个超集的 docker compose 文件,其中包括从 repo 本身安装的卷。
docker-compose-non-dev.yml
我必须将它作为容器部署在 EKS 集群的 pod 中。我无法弄清楚卷应该如何完成,因为文件是在我们运行时从 repo 本地安装的:
docker-compose up
[编辑]
我刚刚用我需要的文件构建了容器。
【问题讨论】:
-
您好@HarikrishnanA,欢迎来到 Stack Overflow!以下任何一个答案是否helped you?
标签:
kubernetes
docker-compose
kubernetes-helm
amazon-eks
docker-volume
【解决方案1】:
Docker compose 是一种面向本地部署的工具(您可能知道),因此它根据该假设优化其工作流程。解决此问题的一种方法是将构成 up 的 docker 映像与您在本地环境中拥有的其他文件一起包装。例如,包装器dockerfile 类似于
FROM <original image>
ADD <local files to new image>
生成的图像就是您将在 EKS 上的云中运行的图像。
当然还有很多其他方法可以解决这个问题,例如使用 Kubernetes 卷并(预)用本地文件填充它们,或者从一开始就将本地文件烘焙到原始映像中,等等。
总而言之,传统的 compose 思维模式(带有本地文件映射)并不是“云部署友好”。
【解决方案2】:
您可以使用名为 kompose 的工具转换 docker-compose.yaml 文件。
就像跑步一样简单
kompose convert
在包含 docker-ccompose.yaml 文件的目录中。
这将创建一堆文件,您可以使用kubectl apply -f .(或kompose up)部署这些文件。你可以阅读更多here。
然而,即使 kompose 会生成 PersistentVolueClaim 清单,也不会创建 PersistentVolumes。你必须自己制作(集群可能会尝试自己创建 PV,但它强烈基于 kompose 生成的 PVC,我不会依赖它)。
Docker compose 主要用于开发、测试和单主机部署[reference],这并不是 Kubernetes 的真正目的(后者是面向云的)。