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
使用下面的docker命令將上面新的容器掛載另一個容器當中去。這個容器可以被多個容器掛載,做到資料共享。
其中-it
表示以交戶的方式執行
進入mydata目錄建立一個test.txt檔案,然後退出容器,檢視本地的data目錄,發現裡面也多了一個test.txt檔案。
最後,可以使用 docker rm -v 命令在刪除容器時刪除該容器的卷。例如:docker rm -vf nginx-fun
,這樣可以在刪除nginx-fun容器同時刪除它的卷。docker volume ls
命令檢視卷。