如果您沒有注意到,每次我們啟動容器時,我們的待辦事項列表都會被清除干凈。為什么是這樣?讓我們深入了解容器是如何工作的。
容器的文件系統
當一個容器運行時,它使用圖像中的各個層作為其文件系統。每個容器還有自己的“暫存空間”來創建/更新/刪除文件。任何更改都不會在另一個容器中看到,即使它們使用相同的圖像。
為了看到這一點,我們將啟動兩個容器并在每個容器中創建一個文件。您將看到在一個容器中創建的文件在另一個容器中不可用。
1.啟動一個ubuntu容器,該容器將創建一個以/data.txt1 到 10000 之間的隨機數命名的文件。
docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
如果您對該命令感到好奇,我們將啟動一個 bash shell 并調用兩個命令(為什么我們有&&)。第一部分選擇一個隨機數并將其寫入/data.txt. 第二個命令只是監視一個文件以保持容器運行。
2.驗證我們可以通過execing 到容器中看到輸出。為此,請打開儀表板并單擊運行ubuntu映像的容器的第一個操作。
您將看到一個終端在 ubuntu 容器中運行 shell。運行以下命令以查看/data.txt文件的內容。之后再次關閉此終端。
$ cat /data.txt
如果您更喜歡命令行,您可以使用該docker exec命令來執行相同的操作。您需要獲取容器的ID(用于docker ps獲取它)并使用以下命令獲取內容。
$ docker exec <container-id> cat /data.txt
你應該看到一個隨機數!
3.現在,讓我們啟動另一個ubuntu容器(相同的圖像),我們會看到我們沒有相同的文件。
$ docker run -it ubuntu ls /
看!那里沒有data.txt文件!那是因為它僅被寫入第一個容器的暫存空間。
4.繼續并使用docker rm -f <container-id>命令刪除第一個容器。
通過前面的實驗,我們看到每個容器每次啟動都是從鏡像定義開始的。雖然容器可以創建、更新和刪除文件,但當容器被移除并且所有更改都與該容器隔離時,這些更改會丟失。有了卷,我們可以改變這一切。
卷提供了將容器的特定文件系統路徑連接回主機的能力。如果容器中的目錄已掛載,則該目錄中的更改也會在主機上看到。如果我們在容器重啟時掛載相同的目錄,我們會看到相同的文件。
卷有兩種主要類型。我們最終將同時使用兩者,但我們將從命名卷開始。
持久化數據
默認情況下,待辦事項應用程序將其數據存儲在容器文件系統中的SQLite 數據庫中。/etc/todos/todo.db如果你不熟悉 SQLite,不用擔心!它只是一個關系數據庫,其中所有數據都存儲在一個文件中。雖然這對于大型應用程序來說不是最好的,但它適用于小型演示。稍后我們將討論將其切換到不同的數據庫引擎。
由于數據庫是單個文件,如果我們可以將該文件保存在主機上并使其可用于下一個容器,它應該能夠從最后一個停止的地方繼續。通過創建一個卷并將其附加(通常稱為“掛載”)到存儲數據的目錄,我們可以持久化數據。當我們的容器寫入todo.db文件時,它將被持久化到卷中的主機。
如前所述,我們將使用命名卷。將命名卷視為簡單的數據桶。Docker 維護磁盤上的物理位置,您只需要記住卷的名稱。每次使用卷時,Docker 都會確保提供正確的數據。
1.使用docker volume create命令創建卷。
$ docker volume create todo-db
2.在儀表板(或使用 )中再次停止并刪除待辦事項應用程序容器docker rm -f <id>,因為它仍在運行而不使用持久卷。
3.啟動 todo 應用程序容器,但添加-v標志以指定卷安裝。我們將使用命名卷并將其掛載到/etc/todos,這將捕獲在該路徑創建的所有文件。
$ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
4.容器啟動后,打開應用程序并將一些項目添加到您的待辦事項列表中。
5.停止并刪除 todo 應用程序的容器。使用儀表板或docker ps獲取 ID,然后docker rm -f <id>將其刪除。
6.使用上面的相同命令啟動一個新容器。
7.打開應用程序。您應該會看到您的項目仍在您的列表中!
8.完成檢查列表后,繼續刪除容器。
本文鏈接:http://www.tebozhan.com/showinfo-119-2257-0.html云計算核心技術Docker教程:容器持久化數據
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: AMD宣布斥資19億美元收購云計算創企Pensando
下一篇: 卷積神經網絡性能優化