gpt4 book ai didi

performance - Docker 推送需要很长时间

转载 作者:行者123 更新时间:2023-12-04 15:32:52 25 4
gpt4 key购买 nike

我有一个使用 Docker 的部署设置,其工作方式如下:

  • 通过 Dockerfile 在我的开发机器上构建镜像
  • 将镜像推送到注册表(我尝试了 Docker Hub 和 Quay.io)
  • 把这个镜像拉到部署服务器上,然后重启容器。

  • 我想尽快完成这些步骤,但它们需要非常长的时间。即使是中等大小的图像(750MiB,包括标准 ubuntu 和 friend ),经过小的修改后,需要 17 分钟 部署。我优化了 Dockerfile 中项目的顺序,所以它实际上大部分时间都会命中缓存的图像。这似乎没什么区别。

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

    但是,如果我按时插入,则表现非常糟糕。推送到 Quay.io 需要 3.5 分钟 当所有图像已经在服务器上时!推送到 Docker Hub 大约需要 12 分钟 !

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

    我怎样才能让这个运行得更快?其他人也看到这种表现吗?它与注册表服务有关,还是与我的本地机器有关?

    我在 Mac OS X 下使用 Docker。

    最佳答案

    请注意:我运行自己的 docker 注册表,该注册表位于我正在发出“docker push”命令的机器的本地,但它仍然需要过多的时间。这绝对不是磁盘的 I/O 速率问题,因为它们由 SSD 支持(并且澄清一下,它们的性能从使用它们的任何其他设备中获得约 500+MB/秒)。但是,docker push 命令似乎与我将其发送到远程站点一样长。我认为还有一些超出“带宽”问题的情况。我的怀疑是,尽管我的注册表是本地的,但它仍在尝试使用 NIC 传输数据(这似乎是有道理的,因为需要 URI 作为推送目标,并且注册表本身就是一个容器)。

    话虽如此,我可以将相同的文件复制到它们最终驻留在本地注册表中的位置,速度比 push 命令快几个数量级。也许解决方案就是这样。然而,有一点很清楚,问题本身并不是带宽本身,而是一般的数据路径。

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

    关于performance - Docker 推送需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33393590/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com