2015-10-28 107 views
4

我有一个安装部署与码头工人认为工作原理如下:泊坞窗推送需要很长的时间

  1. 建立我的开发机器上的图像通过Dockerfile
  2. 按下图像注册表(我试过既泊坞窗枢纽和Quay.io)
  3. 这一形象拉到部署服务器,并重新启动容器。

我希望尽快完成这些步骤,但需要花费很长时间。即使对于尺寸适中的图像(750MiB,包括标准ubuntu和朋友),稍作修改后,需要部署17分钟。我优化了我的Dockerfile中的项目顺序,因此大多数时候它实际上都会缓存图像。这似乎没有什么区别。

主要的罪魁祸首是docker push一步。对于Docker Hub和Quay.io来说,推送图像需要很长的时间。在我做的一个简单的基准测试中,我执行了两次,一次执行docker push,因此所有以前的图像都已经在注册表中。所以,我只看到这几行:

... 
bf84c1d841244f: Image already pushed, skipping 
... 

但是,如果我的时间推,性能是可怕的。推到Quay.io需要3.5分钟当所有的图像都已经在服务器上!推到码头工人枢纽约需12分钟

因为很多人在生产中使用Docker,所以在某些地方显然有些问题,这些时间与持续交付完全相反。

如何让这个运行更快?其他人也看到这种表现吗?它是否与注册表服务有关,或者与我的本地机器有关?

我使用在Mac OS X

回答

1

泊坞出于这个原因,企业通常在本地网络上运行自己的注册表。这也使组织能够控制自己的数据并避免依赖外部服务。

您还会发现,Google Container Engine和Amazon Container Service等云主机托管注册表以向用户提供快速的本地下载。

+1

恐怕这个答案会导致几个混淆。关于“控制我自己的数据”和“依靠外部服务”的观点是无关紧要的。所有代码完全在云上运行,而我的源代码仍然在Github上。其次,我不明白云提供商如何拥有快速的本地**注册管理机构?据我所知,这些只是致力于单个公司/账户的注册管理机构。所以你建议这个性能问题的根源在于Quay和Docker没有以足够的容量运行他们的服务? – user1496984

1

是否在previews answer中说过,您应该使用本地注册表。这不是很难安装和使用它,你可以找到信息,如何开始使用它。这可能会更快,因为您不受限于提供商的上传速度限制。顺便说一句,您可以随时将本地注册表中的映像推送到Docker Hub或其他本地注册表中(例如,安装在您的客户网络中)。

另外一件事,就持续集成和交付而言,我可以建议使用一些持续集成服务器,它可以在Linux操作系统上自动构建映像,而不需要使用boot2docker或docker-机。出于测试和开发的目的,您可以在本地构建您的图像,而无需推送到远程注册表。

+0

是的,3.5分钟到Quay.is可能是由于OPs宽带上传带宽。 –

+0

@stanislav感谢您的回复。我会考虑运行一个本地注册表,但要清楚的是,你认为问题在于码头和Docker Hub没有足够的容量给每个人? – user1496984

+0

@AdrianMouat感谢您的评论,但是我的上传带宽如何成为瓶颈?如果对于每张图片,它都会说“跳过”?您是否建议Docker上传整个映像,计算注册表中的校验和,将其与之前的校验和进行比较,然后重新上传它们,如果它们不同? – user1496984

0

只是说明:我运行我自己的docker注册表,这是本地机器我发出“docker push”命令,它仍然需要大量的时间。这绝对不是来自磁盘的I/O速率问题,因为它们是由SSD支持的(并且为了澄清,它们的性能高于使用它们的其他任何东西〜500 + MB /秒)。但是,docker push命令似乎只要将它发送到远程站点就可以。我认为除了“带宽”问题之外还有一些问题。我的怀疑是,无论我的注册表是否是本地的,它仍然试图使用NIC来传输数据(这似乎是有意义的,因为需要将URI作为推送目标,而注册表本身就是一个容器)。

这就是说,我可以将相同的文件复制到最终位于本地注册表中比push命令更快的位置。也许解决方案就是这样。但是,有一点很明确,就是单纯的问题不是带宽本身,而是一般的数据通路。

无论如何,运行本地注册表不可能(完全)解决OP的问题。虽然我刚开始进行调查,但我怀疑需要对码头进行代码更改才能解决此问题。我不认为这是一个错误,而是一个设计挑战。 URI和/或主机 - >主机通信需要网络堆栈,即使源和目标是同一台机器/主机/容器。

+0

您的评论尽管有用,但并未完全回答问题。您可以尝试缩短评论并将其添加为评论。 –

+0

我的意思是它是一个评论,对不起。我对iPost是一种新鲜感。我是一个数据隐士。 –

+0

没有伤害:-)。您可以点击问题下的“添加评论”添加评论。您也可以通过点击答案下的“删除”来删除答案。答案被投票,并应解决问题,并具有最低的质量。请参阅[这里](https://stackoverflow.com/help/how-to-answer)关于答案应该是什么样的。 –