docker - 层数是否会影响当前和 future docker 镜像的大小、设置时间或性能?

标签 docker docker-image docker-layer

假设我有 2 个选项来添加 docker 层。

选项 1:

RUN python -m nltk.downloader punkt averaged_perceptron_tagger brown

选项 2:

RUN python -m nltk.downloader punkt 
RUN python -m nltk.downloader brown
RUN python -m nltk.downloader averaged_perceptron_tagger 

我知道第二个选项添加了 3 层,而第一个选项只添加了 1 层。

层数是否会影响当前和 future docker 镜像的大小、设置时间或性能?

注:Current表示当前图像。 Future 意味着任何图像都可以使用现有图像中的某些层,从而加快设置速度。

最佳答案

它确实会影响设置时间并可能影响大小。它不应该是性能,即性能是指正在运行的应用的实际性能。

它确实会影响设置时间,因为层定义得越好,它们就越能更好地重复用于其他图像。归根结底,一个图层只是一个缓存,如果它可以为其他图像共享,构建时间将会得到改善。

关于大小,这实际上取决于您构建图像的方式。例如,如果您有运行时不需要的构建依赖项,则图像会更大,因为它会有这样的依赖项。说到 python,通常您会想要安装 build-essential 来构建您的应用程序,但是,一旦安装了软件包,您就不再需要 build-essential。如果不删除它,图像会变大。

要删除它,您有两种选择:

  • 要么使用长 RUN 语句,在其中安装 build-essential,安装所需的包,然后删除 build-essential,都在同一个 RUN 中。
  • 只需使用多阶段,并使用不同的阶段来构建和运行。

关于docker - 层数是否会影响当前和 future docker 镜像的大小、设置时间或性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60147349/

相关文章:

docker - Dockerfile 中的每一行都会创建一个新层吗?

kubernetes - Docker Image 和它的 Kubernetes Pod 不同

python - docker-compose 附加后挂起

docker - 在另一个容器的本地主机上发布端口

docker - 为什么允许此 docker 镜像通过防火墙?

docker - 在 Fedora 23 中更改默认 Docker 镜像下载位置

node.js - 无法使docker swarm模式与nodejs一起使用

docker - 我们如何在 Kubernetes 中查看缓存的图像?

linux - 私有(private) Docker 注册表错误

docker - docker 构建之间的层不能共享