之前一直討論到每個容器本身彼此獨立且可拋棄式特性真好,但...如果這容器跑的是一個儲存客戶資料的資料庫呢?
可能因為任何原因想要升版,所以執行中的SQL9.0容器關掉,重跑一個SQL9.5的容器,但資料庫裡的資料不就不翼而飛了><,所以這時Volume的功能就用上了,簡單來說它就是用來長期儲存容器內的檔案資料之用,這樣才不會被飛踢知道嗎?透過圖解可以更清楚理解動向:
看圖說故事,當使用volume時,docker會在本機上隨機新增一個資料夾(Local storage area
),一般會在 /var
底下,然後讓這個資料夾跟容器中的某個資料夾串連起來。
因為他們互聯關係已經建立,所以當你自己容器內已經關聯的資料夾有任何變更時,本地資料夾也會跟著改變,而重中之重,當容器被刪除後,資料夾檔案實際仍然是保留的,故我們就可以利用此特性來做更版運帷等應用了。
docker volume create --name gydkdata(多看到了一個gydkdate,就這樣誤打了)
docker volume ls
/var/docker# mkdir gydkdata (隨性示範,實際建立路徑自己決定)
docker images 物色一下等等就用ubuntu與Centos兩兄弟來示範
docker volume rm gydkdate (小弟的畫面清單潔癖,看到多餘的就是想要吖M)
docker run -v gydkdata:/var/docker/gydkdata -it ubuntu ls -l /var/docker/gydkdata
docker run -v gydkdata:/var/docker/gydkdata -it ubuntu touch /var/docker/gydkdata/teatfile
docker run -v gydkdata:/var/docker/gydkdata -it ubuntu ls -l /var/docker/gydkdata
docker container ls (確認已經沒有容器在上面作弊)
docker run -v gydkdata:/var/docker/gydkdata -it centos (進入到centos肚子中)
cd /var/docker/gydkdata/
ls
腦補一下,實際上volume本身又有區分兩種:
Host volume
直接使用host上的目錄做為volumeNamed volume
則是使用docker產生並可管理的資料夾做為volume (本篇示範V)