繁体   English   中英

Docker:Alpine Linux:为什么要添加apk <package> 持久在容器中?

[英]Docker: Alpine Linux: why is apk add <package> persistent in a container?

晚上好。

我们已经了解到Docker容器是无状态的,但它看起来像一个Alpine Linux容器违反了这个规则:

  1. 我们使用docker run <containername> -it /bin/sh启动Alpine Linux容器
  2. 我们安装了缺少的纳米编辑器: apk add nano

如果我们现在停止并启动此容器,它仍然知道nano编辑器。

这是Alpine Linux中的一个特殊功能还是听起来我们的Docker主机做了一些奇怪的事情?

非常感谢任何光明和帮助! 亲切的问候,
托马斯。

看起来这里对这个概念有一个根本的误解:Docker容器本身并不是无状态的。 如果对容器文件系统进行任何更改,则只要容器存在,它就会保留。 只有当容器被销毁(删除)时,文件系统的可写层才会被删除,该层包含自容器创建以来所做的所有更改。

当我们说“Docker容器是无状态的”时,我们不是指它们根据定义是无状态的事实,而是关于如何使用容器的最佳实践和指南。 无状态是使用容器的模式 ,允许将它们视为一次性实体,例如:

  • 如果由于应用程序崩溃或系统/硬件故障导致丢失无状态容器,则您不关心这一点,只需创建一个新的容器,它将继续作为其前身工作。
  • 如果要将一些容器化应用程序从一个非常繁忙的服务器卸载到另一个非常繁忙的服务器(例如,您刚刚购买并安装了新硬件),则会终止原始服务器上的容器并在新服务器上重新创建容器。

也就是说,您必须了解Docker不会强制执行无状态 - ,容器的创建者和用户必须关心它。 您必须将所有持久性应用程序数据存储在外部存储器上,从外部安装到容器中,或者存储在网络存储器中,例如存储在数据库中。

所以,回答最初的问题 - 阿尔卑斯山没什么特别的。 您将文件添加到容器中 - 您将它们放在容器中,直到容器被销毁。 这适用于任何容器,不仅适用于从Alpine图像创建的容器。

当你停止它时,容器仍然存在。 只有当您删除容器docker container rm <id>并通过docker container run再次启动它时,它才会成为指定映像之外的新容器。 如果你停止然后重新运行它 - 它仍然是同一个。

(它只会在宽限期后被杀死)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM