【问题标题】:Deploying with docker push is slow because there are many images使用 docker push 部署很慢,因为有很多镜像
【发布时间】:2015-07-03 08:55:34
【问题描述】:

我正在尝试通过 docker 进行部署。我正在使用以下工作流程:

  1. 在本地构建
  2. 将我的图像推送到 docker hub
  3. 在服务器上:拉取图片
  4. 在服务器上:启动映像

但是 docker push 需要永远。大约有 30 张图像,它必须遍历每一张并说“图像已经存在”。有什么办法可以加快速度吗?

或者,我是否应该使用不同的流程进行部署?

【问题讨论】:

    标签: deployment docker


    【解决方案1】:

    如果您像我一样推动 AWS ECR,可能是您本地的 docker 需要重新启动。请参阅有关 AWS ECR 缓慢的主题:

    https://forums.aws.amazon.com/thread.jspa?threadID=222834

    这也可能会影响其他平台。 Mac 上似乎在 1.12.1 左右,无论如何,重启 Docker 会解决一些缓慢的问题。

    【讨论】:

    • 在我的 Mac 10.13.4 上运行 Docker 18.06.1-ce-mac73 并推送到 ECR 时遇到了同样的问题。重新启动 docker,重新推送,并像魅力一样工作。
    【解决方案2】:

    如果您使用的是本地注册表,我们最近添加了一个 redis 缓存,它极大地加快了速度。有关如何执行此操作的详细信息,请参见注册表 github 页面

    https://github.com/docker/docker-registry

    虽然推送新图像仍然需要时间,但拉取速度非常快,因为所有层都在 redis 缓存中。

    【讨论】:

    • 检查已经推送的图片怎么样?现在每个图像层需要大约 2-3 秒,所以即使它们都已经被缓存,它也需要很长时间。
    • 我们的设置是即时的。如果您要存储到 s3,redis 会很有帮助。我对 dockerhub 的推送不多,所以我不能说。
    • Docker-registry 已弃用,有利于 docker 分发。它以新的 API 设计github.com/docker/distribution 取代了 docker/docker-registry 项目
    • 现在看来内存缓存是默认选项,所以redis并没有太大的区别。 docker exec -it registry cat /etc/docker/registry/config.yml存储:缓存:blobdescriptor:内存
    【解决方案3】:

    您在每次部署时都推送更多/大型镜像层的最可能原因是您没有优化 Dockerfile。这是一个很好的介绍http://blog.tutum.co/2014/10/22/how-to-optimize-your-dockerfile/

    【讨论】:

    • 无论如何,对我来说,我使用像 ansible 这样的东西在服务器上构建图像。
    • 链接似乎死了。
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多