1. 程式人生 > >Docker 儲存之資料卷(Volume)

Docker 儲存之資料卷(Volume)

Volume提供了獨立於容器之外的持久化儲存,以及容器與容器之間的共享資料。

  • 建立資料卷

在docker run 命令中加-v選項可以建立資料卷。下面執行一個ngnix容器,通過-v掛載一個卷。
這裡寫圖片描述
當我們建立一個容器的時候,docker會自動對它進行命名。也可以使用--name標識來命名容器。

容器執行起來後可以通過docker inspect命令來檢視容器的資訊,這裡我們主要關心下面這塊內容:
這裡寫圖片描述
其中Source的值就是掛載到本地的目錄地址。Docker 將本地一個 _data 目錄 mount 為容器內的 /usr/share/nginx/html 目錄了。我們可以進入此目錄檢視一下,發現有兩個nginx的預設檔案。
這裡寫圖片描述


修改index.html檔案的內容:
這裡寫圖片描述
使用下面的命令進入容器bash

docker exec -it container-id或者container-name /bin/bash

這裡-it表示以互動的方式執行
這裡寫圖片描述
可以發現在容器中檢視index.html的內容已經被修改。

注意,在 容器被刪除後,/var/lib/docker/volumes/f143b7f379fb6d012a08656fc950bf6df4bf5a5b90c72f310644aa997620122b/_data 目錄及其中的內容都還會保留下來,但是,新啟動的容器無法再使用這個目錄,也就是說,已有的資料不能自動地被重複使用了。

  • 掛載本地檔案作為資料卷

docker目錄下建立一個html目錄,在html目錄建立index.html檔案:
這裡寫圖片描述
使用下面的命令將本地目錄掛載到容器上。
這裡寫圖片描述
修改html目錄下的index.html檔案,就可以反應到容器當中。

這是方式和第一種方式沒有本質區別,在第一種方式中沒有指定本地掛載的目錄,而是由docker自己指定,對於當前這種方式是由我們自己指定一個本地目錄來掛載。重新啟動容器時,可以再次使用同樣的方式來將 html 目錄掛載到新的容器內,這樣就可以實現資料持久化的目標。

  • 容器資料卷

在docker目錄下建立一個data目錄,然後使用下面的命令建立一個新的容器
這裡寫圖片描述
docker create

命令為指定的映象(image)添加了一個可讀寫層,構成了一個新的容器。注意,這個容器並沒有執行。

使用下面的docker命令將上面新的容器掛載另一個容器當中去。這個容器可以被多個容器掛載,做到資料共享。
這裡寫圖片描述

其中-it表示以交戶的方式執行
這裡寫圖片描述

進入mydata目錄建立一個test.txt檔案,然後退出容器,檢視本地的data目錄,發現裡面也多了一個test.txt檔案。
這裡寫圖片描述

最後,可以使用 docker rm -v 命令在刪除容器時刪除該容器的卷。例如:docker rm -vf nginx-fun,這樣可以在刪除nginx-fun容器同時刪除它的卷。docker volume ls命令檢視卷。