如何在构建Docker镜像时以惯用方式访问敏感数据?

Ben*_*ley 25 docker

有时在构建Docker镜像时需要使用敏感数据.例如,用于下载远程文件或从私有存储库安装依赖项的API令牌或SSH密钥.可能需要分发结果图像并省略用于构建它的敏感凭证.如何才能做到这一点?

我见过docker-squash,可以将多个图层压成一个,从最终图像中删除任何已删除的文件.但是有更惯用的方法吗?

Mit*_*ent 4

关于惯用方法,我不确定,尽管 docker 还很年轻,有太多习语。

然而,我们公司也遇到了同样的问题。我们得出以下结论,尽管这些是我们的最大努力,而不是既定的 docker 最佳实践。

1) 如果您在构建时需要这些值:在构建上下文中提供一个属性文件,其中包含可以在构建时读取的值,然后可以在构建后删除该属性文件。这不是那么便携,但可以完成工作。

2) 如果您在运行时需要这些值:将值作为环境变量传递。它们对于有权访问盒子上 ps 的人来说是可见的,但这可以通过 SELinux 或其他方法进行限制(老实说,我不知道这个过程,我是开发人员,运营团队将处理该部分)。

  • 如果在单个“RUN”命令中您下载了某个文件,对其内容执行任何您需要的操作,最后删除该文件,则下载的文件将不会提交到层中。它必须位于单个“RUN”命令中 (11认同)
  • 关于1,问题是当将镜像推送到索引(Docker hub、quay.io等)时,镜像的所有层都会被推送,包括具有属性文件的层。任何提取该映像的人都可以使用仍具有属性文件的层启动容器并查看敏感变量。 (5认同)