一開始,
樓主就認為
volume
是用來持久化的
,但是這實際上不對
,因為認為
volume
是用來持久化的同學一定是認為容器無法持久化
,所以有了
volume
來幫助容器持久化
,事實上
,容器會一直存在
,除非你刪除他們
.
容器是持久的,
直到你刪除他們
,並且你只能這麼做
:
$docker rm my_contariner
如果你沒有執行此命令,
那麼你的容器會一直存在
,依舊可以啟動
,停止等
.如果你找不到容器
,可以執行
$docker ps -a
docker ps只能顯示正在執行的容器
,但是容器也會處於停止狀態
,這種情況下
,上面的命令會顯示所有的容器
,無論他們處於什麼狀態
.docker run...
命令可以有很多的組合
(它提供了
docker
容器從建立到啟動的所有功能
),它會建立乙個新的容器
,然後啟動它.
所以說,volume
不是為了持久化
.
volume可以將容器以及容器纏身的資料分離開來
,這樣的話
,當你使用
docker rm my_container
刪除容器時
,不會影響相關的資料.
volume可以使用下面兩種方式建立
:
1.在dockerfile
指定volume /some/dir
2.執行docker run -v /some/dir
命令指定
無論哪種方式都是做了同樣的事情.
他們告訴
docker
在主機上建立乙個目錄
(預設情況下是在
/var/lib/docker),
然後將其掛載到指定的路徑
(本例中是
:/some/dir).
當刪除使用該
volume
的容器時
,volume
本身不會受到影響
,它可以一直存在下去
.
如果在容器中不存在指定的目錄,
那麼該目錄將會被自動建立.
你可以告訴docker
同時刪除容器和
volume:
$docker rm -v my_container
有時候,
你想在容器中使用主機上的某個目錄
,你可以通過其他的引數來指定:
$docker run -v /host/path:/some/path...
這就明確的告訴docker
使用指定的主機路徑來代替
docker
床架你的根路徑並掛載到容器內指定的路徑
(上例中是
/some/dir).
需要注意的是
,這種方式同樣支援問檔案.在
docker
術語中,
這通常被稱為
bind-mounts.
如果主機上的路徑不存在
,目錄將自動在給定的路徑中建立.
容器也可以與其他容器共享volume:
$docker run --name my_container -v /some/path ...
$docker run --volumes-from my_container --name my_contaner2 ...
上面你的案例將告訴docker
從第乙個容器掛載相同的
volume
到第二個容器
,它可以在兩個容器之間共享資料
.
如果你執行docker rm -v my_container命令,
而上面的第二容器依然存在,那
volume
就不會刪除
,如果你不使用
docker rm -v my_container2
刪除第二個容器
,那麼這個
volume
就是一直存在
.
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...
mysql 索引深入理解 深入理解MySql的索引
為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...