Docker:Alpine Linux:为什么apk add <package>在容器中持久存在?

Tom*_*Tom 3 docker alpine-linux

晚上好。

我们已经了解到Docker容器是无状态的,但是看起来Alpine Linux容器违反了以下规则:

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

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

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

非常感谢您的帮助!亲切的问候,
托马斯。

Dan*_*ver 6

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

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

  • 如果您由于应用程序崩溃或系统/硬件故障而丢失了无状态容器,则无需担心,而只需创建一个新容器即可继续工作。
  • 如果要将某个容器化的应用程序从一台非常繁忙的服务器上卸载到另一台利用率不高的服务器上(例如,您刚刚购买并安装了新硬件),则可以在原始服务器上终止该容器,然后在新服务器上重新创建该容器。

这就是说,你要明白,码头工人不强制无国籍- ,容器的创造者和使用者,要关心它。您必须将所有持久性应用程序数据存储在外部存储中,或者从外部安装到容器中,或者存储在网络存储中,例如数据库中。

因此,回答最初的问题-阿尔卑斯山没有什么特别的。您将文件添加到容器中-直到容器被销毁为止,您都可以在其中保存文件。这对于任何容器都是如此,不仅适用于根据Alpine映像创建的容器。