Docker多阶段构建,Kubernetes和Distroless兼容性

时间:2018-09-18 09:22:47

标签: docker kubernetes

在kubernetess 1.10中使用基于Distroless的容器时,我面临着“理论上”的兼容性问题。

实际上,distroless需要docker 17.5(https://github.com/GoogleContainerTools/distroless),而kubernetes仅支持17.03版(https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#external-dependencies

  1. 是否有可能在kubernetes 1.10中运行非发行版容器 集群没有任何问题?
  2. 是否有可能建立基于Distroless的 运行docker 17.05的构建服务器上的映像,然后将其部署到 kubernetes 1.10集群(docker 17.03)?

2 个答案:

答案 0 :(得分:2)

仅需 即可使用多级 docker buildDockerfile构建“无损”图像,17.05的要求。构建映像后,没有什么可以阻止它在较旧的Docker /容器版本上运行的。

Docker通过使用FROM: scratch来支持不存在年龄分布的图像,现在将其留给图像作者来填充软件所需的任何内容,在某些情况下,例如完全静态的二进制文件可能只是该软件的二进制文件仅此而已:)

答案 1 :(得分:1)

似乎您仅需要Docker 17.05+才能使用多阶段文件构建映像。
在使用多阶段Dockerfile构建映像之后,它将与在注册表中的映像相同,就像您以老式方式生成映像一样。

取自Use multi-stage builds

  

对于多阶段构建,您可以在Dockerfile中使用多个FROM语句。每个FROM指令可以使用不同的基础,并且每个都开始构建的新阶段。您可以有选择地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下不需要的所有内容。

     

最终结果是与以前相同的微小生产映像,并且大大降低了复杂性。

Kubernetes不使用Dockerfile创建Pod。它使用可直接从Docker注册表运行图像的方式。

这就是为什么我相信您可以在Kubernetes Pods中使用此类图像而不会出现任何问题。

但是无论如何,要创建和推送图像,您必须使用带有Docker 17.05+的构建机器,该机器可以在Dockerfile中使用新的多阶段语法。