簡體   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