在docker-compose中定义docker注册表以在具有堆栈部署的集群中使用

时间:2018-08-19 03:20:23

标签: docker-compose docker-swarm docker-registry docker-swarm-mode

对于所有经验丰富的DevOps家伙,我有一个问题,关于将私有注册表作为集群中的一部分部署。

从docker文档中看来,需要首先定义并公开(也要保护)注册表,然后将映像首先推送到其中。只有这样,它才能在堆栈中使用。

但是我想知道我是否只想针对正在部署的特定堆栈使用此注册表容器,是否有一种方法可以将注册表定义为docker-compose.yml的一部分,然后使用depends_on定义其他容器-我的注册表?

我的常规容器结构是:应用程序,Jenkins,安全的Nginx作为反向代理(这是向主机公开的唯一代理),现在我想添加注册表容器(因为我收集了这是运行的唯一方法)一群..还是它?)

我在这里想要实现的是拥有一个可以立即与docker stack deploy —compose-file一起部署的堆栈,而无需首先创建注册表并将映像推送到其中。另外,从理论上讲,如果只能通过堆栈中的服务访问此注册表,那么它实际上并不需要所有的安全性。是真的吗?

任何指导将不胜感激。

2 个答案:

答案 0 :(得分:1)

我同意以上@mikgne。我对此主题的研究得出了以下结论(一位Docker专家在他的博客上给出了答案。):

从理论上讲,只要首先创建注册表服务,然后在此之后立即创建另一个将映像构建/推送到其中的临时服务,就可以创建注册表并将映像推送到其中。然后,可以从该注册表中获取连续的服务。显然这与Docker中的服务概念背道而驰,因为它们并不是临时的。

基本上,我知道必须先创建注册表,然后再将映像推送到其中。我认为Docker应该考虑实施这种自动推送。.我不知道这种方法是否有缺点,如果您认为这不是一种好的方法,请分享您的想法,以及这可能会导致什么问题。

答案 1 :(得分:0)

您托管一个注册表,以使所有群集节点都可以访问您的图像。无非就是一个中央图像存储。群集模式不依赖于私有注册表,只需确保将服务部署到的每个节点都可以访问该映像。

即使您完成构建包含注册表的堆栈,也需要将映像推送到其中。 docker stack deploy无法做到这一点。