gpt4 book ai didi

docker - 为什么我们在容器内的工作不应该修改容器本身的内容呢?

转载 作者:行者123 更新时间:2023-12-02 19:00:37 26 4
gpt4 key购买 nike

我正在阅读 article与 docker 镜像和容器相关。

它说容器是图像的一个实例。很公平。它还说,每当您对容器进行一些更改时,您都应该创建它的镜像以供以后使用。

但同时它说:

Your work inside a container shouldn’t modify the container. Like previously mentioned, files that you need to save past the end of a container’s life should be kept in a shared folder. Modifying the contents of a running container eliminates the benefits Docker provides. Because one container might be different from another, suddenly your guarantee that every container will work in every situation is gone.



我想知道的是,修改容器内容有什么问题?这不是容器的用途吗?我们在其中进行自己的更改,然后创建一个每次都可以使用的图像。即使我们谈论的是修改容器本身的内容,而不仅仅是添加任何额外的包,它会如何损害任何东西,因为从该容器创建的镜像也会有这些更改,并且从该镜像创建的其他容器也将继承这些更改。

最佳答案

将容器文件系统视为短暂的。您可以随心所欲地修改它,但是当您删除它时,您所做的更改就消失了。

这是基于联合文件系统,当前版本中最流行/推荐的是 overlay2。覆盖文件系统将图像的多个较低层与容器的上层合并在一起。将通过这些层执行读取,直到在容器或图像文件系统中找到匹配项。写入和删除只在容器层执行。

因此,如果您安装软件包并进行其他更改,当容器被删除并从同一个镜像重新创建时,您将回到原始镜像状态而无需进行任何更改,包括覆盖文件系统中的新/空容器层。

在软件开发工作流程中,您希望将对应用程序二进制文件和依赖项的更改打包并发布为新镜像,并且这些镜像应使用 Dockerfile 创建。持久性数据应该存储在一个卷中。配置应作为文件、环境变量或 CLI 参数注入(inject)。理想情况下,临时文件应该写入 tmpfs,除非这些文件很大。通过这种方式,甚至可以将容器的根 FS 设为只读,从而消除大部分依赖注入(inject)代码在容器文件系统内部运行的攻击。

关于docker - 为什么我们在容器内的工作不应该修改容器本身的内容呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60692773/

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