docker學(xué)習(xí)(一)docker 概述
docker學(xué)習(xí)(二)docker 安裝部署
docker學(xué)習(xí)(三)常用命令
docker學(xué)習(xí)(四)使用 commit 制作鏡像
docker學(xué)習(xí)(五)使用 Dockerfile 制作鏡像
docker學(xué)習(xí)(六)卷 Volume
docker學(xué)習(xí)(七)docker daemon
docker學(xué)習(xí)(八)HTTP/HTTPS 代理
docker學(xué)習(xí)(九)docker 調(diào)試
docker學(xué)習(xí)(十)docker 持久化存儲
docker本身提供了一種機(jī)制,可以將主機(jī)上的某個(gè)目錄與容器的某個(gè)目錄(稱為掛載點(diǎn)、或者叫卷)關(guān)聯(lián)起來,容器上的掛載點(diǎn)下的內(nèi)容就是主機(jī)的這個(gè)目錄下的內(nèi)容,這類似linux系統(tǒng)下mount的機(jī)制。 這樣的話,我們修改主機(jī)上該目錄的內(nèi)容時(shí),不需要同步容器,對容器來說是立即生效的。 掛載點(diǎn)可以讓多個(gè)容器共享。
通過docker run命令
命名卷操作
運(yùn)行命令:
sudo docker run -it --rm --name centos7zlm-container -v /opt/zlm/conf/:/opt/zlm/build/conf/ centos7zlm:v1.0 /bin/bash
可選options:-v hostdir:containerdir 標(biāo)記在容器中設(shè)置了一個(gè)目錄hostdir為掛載點(diǎn),并與主機(jī)上的containerdir目錄關(guān)聯(lián)。
這樣不管是在容器中對 containerdir 目錄的操作,還是在主機(jī)上對 hostdir 目錄的操作,都是完全實(shí)時(shí)同步的,因?yàn)檫@兩個(gè)目錄實(shí)際都是指向主機(jī)目錄。
匿名卷操作
運(yùn)行命令:
sudo docker run -it --rm --name centos7zlm-container -v /opt/zlm/build/conf/ centos7zlm:v1.0 /bin/bash
-v標(biāo)記只設(shè)置了容器的掛載點(diǎn),并沒有指定關(guān)聯(lián)的主機(jī)目錄。這時(shí)docker會(huì)自動(dòng)綁定主機(jī)上的一個(gè)目錄。通過docker inspect 命令可以查看到。
[test@localhost zlm]$ sudo docker inspect centos7zlm-container
[
{
......
"Name": "/centos7zlm-container",
......
"Mounts": [
{
"Type": "volume",
"Name": "bfa6d697d1e25a28b48d7d7d7b76a1c607302b8e6495c9ccdb932df4d3abf3f2",
# 主機(jī)目錄
"Source": "/var/lib/docker/volumes/bfa6d697d1e25a28b48d7d7d7b76a1c607302b8e6495c9ccdb932df4d3abf3f2/_data",
# 容器目錄
"Destination": "/opt/zlm/build/conf",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "b5241c67e201356c557474255308b801521558bfd523c5a748d518d501e7654f",
# 主機(jī)目錄
"Source": "/var/lib/docker/volumes/b5241c67e201356c557474255308b801521558bfd523c5a748d518d501e7654f/_data",
# 容器目錄
"Destination": "/opt/zlm/build/log",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
......
}
]
[test@localhost zlm]$
上面 Mounts下的每條信息記錄了容器上一個(gè)掛載點(diǎn)的信息,“Destination” 值是容器的掛載點(diǎn),"Source"值是對應(yīng)的主機(jī)目錄。
可以看出這種方式對應(yīng)的主機(jī)目錄是自動(dòng)創(chuàng)建的,其目的不是讓在主機(jī)上修改,而是讓多個(gè)容器共享。
列出當(dāng)前所有的卷:
[test@node-65 ]# sudo docker volume list
DRIVER VOLUME NAME
local bfa6d697d1e25a28b48d7d7d7b76a1c607302b8e6495c9ccdb932df4d3abf3f2
local b5241c67e201356c557474255308b801521558bfd523c5a748d518d501e7654f
通過dockerfile創(chuàng)建
通過Dockerfile的 VOLUME 指令可以在鏡像中創(chuàng)建掛載點(diǎn),這樣只要通過該鏡像創(chuàng)建的容器都有了掛載點(diǎn)。
通過 VOLUME 指令創(chuàng)建的掛載點(diǎn),是匿名的,無法指定主機(jī)上對應(yīng)的目錄,是自動(dòng)生成的。
VOLUME ["/opt/zlm/build/conf/", "/opt/zlm/build/log/"]
容器共享卷
sudo docker run -it --name centos7zlm-container1 centos7zlm:v1.0 /bin/bash
上面命令中的 centos7zlm:v1.0 是用Dockerfile文件構(gòu)建的鏡像。 這樣容器 centos7zlm-container1 就有了 /opt/zlm/build/conf 和 /opt/zlm/build/log 兩個(gè)掛載點(diǎn)。
下面我們創(chuàng)建另一個(gè)容器可以和 centos7zlm-container1 共享 /opt/zlm/build/conf 和 /opt/zlm/build/log,操作如下:
# 可以是來源不同鏡像
sudo docker run -it --name ubuntu1804-container2 --volumes-from centos7zlm-container1 ubuntu:18.04 /bin/bash
# 也可以是同一鏡像
sudo docker run -it --name centos7zlm-container3 --volumes-from centos7zlm-container1 centos7zlm:v1.0 /bin/bash
以上三個(gè)容器 centos7zlm-container1,centos7zlm-container3,centos7zlm-container3 均有 /opt/zlm/build/conf 和 /opt/zlm/build/log 兩個(gè)目錄,且目錄中內(nèi)容是共享的,任何一個(gè)容器修改了內(nèi)容,別的容器都能獲取到。
刪除卷
刪除容器之時(shí)刪除相關(guān)的卷,為:
sudo docker rm -v centos7zlm-container
刪除指定的卷文章來源:http://www.zghlxwxcb.cn/news/detail-523620.html
sudo docker volume rm
實(shí)踐:數(shù)據(jù)容器
如果多個(gè)容器需要共享數(shù)據(jù)(如持久化數(shù)據(jù)庫、配置文件或者數(shù)據(jù)文件等),可以考慮創(chuàng)建一個(gè)特定的數(shù)據(jù)容器,該容器有1個(gè)或多個(gè)卷。
其它容器通過 --volumes-from 來共享這個(gè)數(shù)據(jù)容器的卷。
因?yàn)槿萜鞯木肀举|(zhì)上對應(yīng)主機(jī)上的目錄,所以這個(gè)數(shù)據(jù)容器也不需要啟動(dòng)。
說明:卷使容器之間的數(shù)據(jù)共享比較方便,但也有很多問題需要解決,如權(quán)限控制、數(shù)據(jù)的備份、卷的刪除等。文章來源地址http://www.zghlxwxcb.cn/news/detail-523620.html
到了這里,關(guān)于docker學(xué)習(xí)(六)卷Volume的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!