gpt4 book ai didi

docker - 创建 docker 镜像的开销是多少?

转载 作者:行者123 更新时间:2023-12-02 18:49:07 25 4
gpt4 key购买 nike

我正在探索使用 docker,以便我们部署新的 docker 镜像而不是特定的文件更改,因此每次部署等都会满足应用程序的所有需求。

问题 1:

如果我在部署新镜像时使用 Docker 工具箱中的工具向 docker 镜像添加一个新的应用程序文件(例如 10 MB),这是否需要将全新的镜像部署到我的容器或执行 docker部署只是取两者的区别,类似于git版本控制?

换句话说,我查看了 docker 基础镜像列表,发现了一个 188 MB 的 ubuntu 版本。如果我使用此基本镜像将新应用程序提交到 docker 镜像,我的 docker 容器是否需要提取它们已经在运行的完整 188 MB 空间以及应用程序,或者是否有一种不同的方式来获取已更改的内容?

补充问题

我是否正确地假设使用 docker 时部署镜像是预期的方法?这意味着任何新的更改都应该需要新的镜像部署,以便镜像被视为不可变?当我使用 AWS 时,我们在 AMI(亚马逊机器镜像)中遵循了这种方法,但存储 AMI 的开销很低,对于 docker 我还不知道。

或者部署 dockerfile 并在容器本身上构建新镜像是更好的做法吗?

最佳答案

Docker 使用分层联合文件系统,Docker 引擎只会拉取一层的一个副本并将其存储在其文件系统上。当你构建一个镜像时,docker会检查它的层缓存,看看是否使用了相同的父层和相同的命令来构建现有的层,如果是,则重用缓存而不是构建新的层。一旦构建中的任何步骤创建了新层,所有后续步骤都将创建新层,因此 Dockerfile 的顺序很重要。您应该将经常更改的步骤添加到 Dockerfile 的末尾,以便可以缓存较早的步骤。

因此,如果您使用 200MB 的基础镜像,有 50MB 的添加内容,但 Dockerfile 末尾只有 10MB 是新添加的内容,那么您第一次将 250MB 推送到 docker 引擎,但只有 10MB 推送到引擎已经拥有该镜像的先前副本,或 50MB 到刚刚拥有 200MB 基础镜像的引擎。

镜像的最佳实践是构建一次,将它们推送到注册表(使用注册表镜像自行托管、由 AWS 等云托管或在 Docker Hub 上),然后将该镜像拉取到每个引擎需要运行它。

有关分层文件系统的更多详细信息,请参阅 https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/

关于docker - 创建 docker 镜像的开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42603701/

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