为什么我们只能推送图片而没有docker-compose.yml到dockerhub

时间:2018-03-13 00:35:23

标签: docker docker-compose

为什么我们只能将图像放在Docker hub上,而不是Docker-compose文件。我的意思是有很多应用程序使用多个容器,这些容器可能是可重用的,可能是轻微的配置。

或者有没有办法做到这一点?现在我使用Docker hub作为我的图像,并使用git存储库作为compose文件。但是我觉得只有一个地方存放这一切会更好。

所以问题是,是否可以按照存储图像的方式存储docker-compose文件? 如果不是,有没有解释为什么Docker的人认为这是一个坏主意? 最后,是否有一个docker-compose文件库?我的意思是在高质量的Docker hub上找到图像但是我在github上发现的docker-compose文件并不是很可靠。

2 个答案:

答案 0 :(得分:3)

简短回答:我认为这会被视为安全漏洞。

注册表服务器存储图像,Docker Hub只是注册表服务器的实现。 docker-compose.yml文件是如何运行映像的定义。如何运行该映像包括诸如卷挂载,要发布的端口,要禁用的命名空间之类的内容,每个都可能会引发安全漏洞。如果不是运行具有安全默认值的图像,而是运行具有未知安全设置的远程撰写文件,并且由docker托管文件,您将打开一个简单的远程攻击向量,可能与docker相关联比私人回购所有者。因此,在Docker高度重视安全性的情况下,我怀疑您是否会看到由他们托管的内容。

在github repo中包含Dockerfile和docker-compose.yml的标准方法是所有内容的传统单一位置。 docker hub注册表成为映像的预构建缓存。可以使用compose文件重新创建构建选项,使用其余repo重新构建Dockerfile以定义创建映像所需的所有内容。事实上,docker build命令允许您直接指向公共github仓库,而不是要求您首先在本地克隆它。

答案 1 :(得分:2)

理论上,人们可以存储Docker-compose文件&源代码控制中的Dockerfiles,就像github。

图像首选的原因,以及为什么有Docker集线器,是因为图像是将应用程序和环境捆绑在一起的单元 - 这有助于确保应用程序运行无论在哪里都一样。

Dockerfiles是构建图像的指令,它们有限制;从给定的图像中,只能进行如此多的修改(参见答案:Number of commands in Dockerfile)。

没有强有力的保证,其他人可以从Dockerfile / docker-compose脚本构建一个行为相同的图像 - 依赖关系可能不同,包更改等等。一个docker镜像应该是独立的,可测试的,并且很可能在连续使用中运行相同(保证,但通常)。