欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker常用命令解讀之volume篇

 更新時(shí)間:2023年03月09日 09:17:30   作者:lihongbao80  
這篇文章主要介紹了docker常用命令解讀之volume篇說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1、docker volume方式

在Docker中,要想實(shí)現(xiàn)數(shù)據(jù)的持久化(所謂Docker的數(shù)據(jù)持久化即數(shù)據(jù)不隨著Container的結(jié)束而結(jié)束),需要將數(shù)據(jù)從宿主機(jī)掛載到容器中。

目前Docker提供了三種不同的方式將數(shù)據(jù)從宿主機(jī)掛載到容器中:

(1)volumes:Docker管理宿主機(jī)文件系統(tǒng)的一部分,默認(rèn)位于 /var/lib/docker/volumes 目錄中;(最常用的方式)

由上圖可以知道,目前所有Container的數(shù)據(jù)都保存在了這個(gè)目錄下邊,由于沒有在創(chuàng)建時(shí)指定卷,所以Docker幫我們默認(rèn)創(chuàng)建許多匿名(就上面這一堆很長ID的名字)卷。

注意:如果volume是空的而container中的目錄有內(nèi)容,那么docker會(huì)將container目錄中的內(nèi)容拷貝到volume中,但是如果volume中已經(jīng)有內(nèi)容,則會(huì)將container中的目錄覆蓋。

(2)bind mounts:意為著可以存儲(chǔ)在宿主機(jī)系統(tǒng)的任意位置;(比較常用的方式)

bind mount在不同的宿主機(jī)系統(tǒng)時(shí)不可移植的,比如Windows和Linux的目錄結(jié)構(gòu)是不一樣的,bind mount所指向的host目錄也不能一樣。

這也是為什么bind mount不能出現(xiàn)在Dockerfile中的原因,因?yàn)檫@樣Dockerfile就不可移植了。

有幾點(diǎn)需要注意:

  • 1、host機(jī)器的目錄路徑必須為全路徑(準(zhǔn)確的說需要以/或~/開始的路徑),不然docker會(huì)將其當(dāng)做volume而不是路徑來處理
  • 2、如果host機(jī)器上的目錄不存在,docker會(huì)自動(dòng)創(chuàng)建該目錄
  • 3、如果container中的目錄不存在,docker會(huì)自動(dòng)創(chuàng)建該目錄
  • 4、如果container中的目錄已經(jīng)有內(nèi)容,那么docker會(huì)使用host上的目錄將其覆蓋掉

(3)tmpfs:掛載存儲(chǔ)在宿主機(jī)系統(tǒng)的內(nèi)存中,而不會(huì)寫入宿主機(jī)的文件系統(tǒng);(一般都不會(huì)用的方式)

2、Volume的基本使用

2.1 管理卷

# docker volume create edc-nginx-vol // 創(chuàng)建一個(gè)自定義容器卷
# docker volume ls // 查看所有容器卷
# docker volume inspect edc-nginx-vol // 查看指定容器卷詳情信息

例如,這里我們創(chuàng)建一個(gè)自定義的容器卷,名為"edc-nginx-vol":

2.2 創(chuàng)建使用指定卷的容器

有了自定義容器卷,我們可以創(chuàng)建一個(gè)使用這個(gè)數(shù)據(jù)卷的容器,這里我們以nginx為例:

# docker run -d -it --name=edc-nginx -p 8800:80 -v edc-nginx-vol:/usr/share/nginx/html nginx

其中,-v代表掛載數(shù)據(jù)卷,這里使用自定數(shù)據(jù)卷edc-nginx-vol,并且將數(shù)據(jù)卷掛載到/usr/share/nginx/html (這個(gè)目錄是yum安裝nginx的默認(rèn)網(wǎng)頁目錄)。

如果沒有通過-v指定,那么Docker會(huì)默認(rèn)幫我們創(chuàng)建匿名數(shù)據(jù)卷進(jìn)行映射和掛載。

創(chuàng)建好容器之后,我們可以進(jìn)入容器里面看看:

可以看到有兩個(gè)默認(rèn)頁,這時(shí)我們新啟動(dòng)一個(gè)SSH連接到宿主機(jī)去到剛剛創(chuàng)建的數(shù)據(jù)卷里邊看看:

可以看到,我們可以訪問到容器里面的兩個(gè)默認(rèn)頁面,由此可知,volume幫我們做的類似于一個(gè)軟鏈接的功能。

在容器里邊的改動(dòng),我們可以在宿主機(jī)里感知,而在宿主機(jī)里面的改動(dòng),在容器里邊可以感知到。

這時(shí),如果我們手動(dòng)stop并且remove當(dāng)前nginx容器,我們會(huì)發(fā)現(xiàn)容器卷里面的文件還在,并沒有被刪除掉。

由此可以驗(yàn)證,在數(shù)據(jù)卷里邊的東西是可以持久化的。如果下次還需要?jiǎng)?chuàng)建一個(gè)nginx容器,那么還是復(fù)用當(dāng)前數(shù)據(jù)卷里面的文件。

此外,我們還可以啟動(dòng)多個(gè)nginx容器實(shí)例,并且共享同一個(gè)數(shù)據(jù)卷,復(fù)用性和擴(kuò)展性較強(qiáng)。

2.3 清理卷

如果不再使用自定義數(shù)據(jù)卷了,那么可以手動(dòng)清理掉:

# docker stop edc-nginx // 暫停容器實(shí)例
# docker rm edc-nginx // 移除容器實(shí)例
# docker volume rm edc-nginx-vol // 刪除自定義數(shù)據(jù)卷

3、Bind Mounts的基本使用

3.1 使用卷創(chuàng)建一個(gè)容器

docker run -d -it --name=edc-nginx -v /app/wwwroot:/usr/share/nginx/html nginx

這里指定了將宿主機(jī)上的 /app/wwwroot 目錄(如果沒有會(huì)自動(dòng)創(chuàng)建)掛載到 /usr/share/nginx/html (這個(gè)目錄是yum安裝nginx的默認(rèn)網(wǎng)頁目錄)。

這時(shí)我們?cè)俅芜M(jìn)入容器內(nèi)部看看:

可以看到,與volumes不同,bind mounts的方式會(huì)隱藏掉被掛載目錄里面的內(nèi)容(如果非空的話),這里是/usr/share/nginx/html 目錄下的內(nèi)容被隱藏掉了,因此我們看不到。

但是,我們可以將宿主機(jī)上的文件隨時(shí)掛載到容器中:

Step1.新建一個(gè)index.html

  

Step2.在容器中查看

3.2 驗(yàn)證綁定

docker inspect edc-nginx

通過上述命令可以看到一大波配置,我們要關(guān)注的是:

3.3 清理

docker stop edc-nginx
docker rm edc-nginx

同volumes一樣,當(dāng)我們清理掉容器之后,掛載目錄里面的文件仍然還在,不會(huì)隨著容器的結(jié)束而消失,從而實(shí)現(xiàn)數(shù)據(jù)持久化。

3.4 應(yīng)用案例

在服務(wù)治理組件中,服務(wù)發(fā)現(xiàn)組件是一個(gè)最常用的組件之一,Consul是一個(gè)流行的服務(wù)發(fā)現(xiàn)開源項(xiàng)目,Consul推薦我們使用配置文件的方式注冊(cè)服務(wù)信息。

因此,我們常常會(huì)將填寫好服務(wù)注冊(cè)配置文件放在宿主機(jī)的一個(gè)文件目錄下將其掛載到Consul的容器指定目錄下,如下所示:

docker run -d -p 8500:8500 --restart=always \
-v /XiLife/consul/data/server1:/consul/data -v /XiLife/consul/conf/server1:/consul/config \
-e CONSUL_BIND_INTERFACE='eth0' --privileged=true \
--name=consul_server_1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul_server_1 -client='0.0.0.0' \
-data-dir /consul/data -config-dir /consul/config -datacenter=xdp_dc;

可以看到,我們通過Bind Mounts的方式將宿主機(jī)上的/XiLife/consul/data/server1目錄掛載到了容器的/consul/data目錄下,還將/XiLife/consul/conf/server1目錄掛載到了容器的/consul/config目錄下,而容器下的兩個(gè)目錄/consul/data和/consul/config則是我們指定的存放agent數(shù)據(jù)和配置文件的地方。

因此,宿主機(jī)上的配置文件的變化會(huì)及時(shí)反映到容器中,比如我們?cè)谒拗鳈C(jī)上的目錄下更新了配置文件,那么只需要reload一下Consul的容器實(shí)例即可:

docker exec consul-server consul reload

這里的consul-server是容器的名字,consul reload是重新加載的命令(非restart)。

4、移除未使用的數(shù)據(jù)卷

[root@izoq008ryseuupz _data]# docker volume ls
DRIVER              VOLUME NAME
local               3c1ed533ce142b49eadc15ba57b87a3bac780e89e22c06503b3e909ab69ed62f
local               5b086d5fdb68b5a58593fdca6d6f0a9b3ead0ed929fd3961b7db48e3a928c24d
local               6b5a0394e690c4e0e869ddecc0db24a748a0229c70a83db46e0f2f95e3314958
local               8eb0f149b72711acd9618f827fc26a9afcce63ed51f1e60ac48e752344f88f22
local               08b4d10ef219075ee8a283112be06e1df52729bf23d3216342da3f8b21a0c127
local               31a6cbc600b3d30d0c567b3842ce5e7944495fcc12d42008385912d32facfd7a
local               208ddc66938b611237d4e868cb8800a36b5390969ba7a22d2d2e65a8c173b2c8
local               3285a7fb977eb7a87da83b2a5ff838c98037b15ec659eeff68c489e7004114ea
local               a4beb8e0e17a3369c8c9a447d777323df71d2b5e2f77ebfc69cc99af39e1077a
local               c8079a1f169f2f0d93923db7b785f1033a46bdc8cf6baf73d742ebbb3c03d6a4
local               centos-volume
local               db153ec29b07b6268e7204fc2e91a32db91797bcd8f4d92c7e2637577cd1a155
local               dcf0505225e08c4c4d24f0e89ac83ed02a5387620734c4add6ab4f1d8196489c
local               f00edae7bd06b264a25329143fa2207e998491e459c24b0c30b1f78996a49369
[root@izoq008ryseuupz _data]# 
[root@izoq008ryseuupz _data]# docker volume prune 
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
31a6cbc600b3d30d0c567b3842ce5e7944495fcc12d42008385912d32facfd7a
208ddc66938b611237d4e868cb8800a36b5390969ba7a22d2d2e65a8c173b2c8
3c1ed533ce142b49eadc15ba57b87a3bac780e89e22c06503b3e909ab69ed62f
db153ec29b07b6268e7204fc2e91a32db91797bcd8f4d92c7e2637577cd1a155
f00edae7bd06b264a25329143fa2207e998491e459c24b0c30b1f78996a49369
a4beb8e0e17a3369c8c9a447d777323df71d2b5e2f77ebfc69cc99af39e1077a
5b086d5fdb68b5a58593fdca6d6f0a9b3ead0ed929fd3961b7db48e3a928c24d
8eb0f149b72711acd9618f827fc26a9afcce63ed51f1e60ac48e752344f88f22
centos-volume
08b4d10ef219075ee8a283112be06e1df52729bf23d3216342da3f8b21a0c127
dcf0505225e08c4c4d24f0e89ac83ed02a5387620734c4add6ab4f1d8196489c
3285a7fb977eb7a87da83b2a5ff838c98037b15ec659eeff68c489e7004114ea


Total reclaimed space: 94.79MB
[root@izoq008ryseuupz _data]# docker volume ls
DRIVER              VOLUME NAME
local               6b5a0394e690c4e0e869ddecc0db24a748a0229c70a83db46e0f2f95e3314958
local               c8079a1f169f2f0d93923db7b785f1033a46bdc8cf6baf73d742ebbb3c03d6a4

5、根據(jù)volume查詢?nèi)萜鱥d

[root@ipsenuat mdm]#  docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}},{{.Mounts}}' | grep 016b3bd621cf4aea76e91a496c4affae9e5a99c4ceca160465863c87fd6e0c78
##或者           
[root@ipsenuat mdm]# docker inspect $(docker ps -q ) --format '{{.State.Pid}}, {{.Id}},{{.Mounts}}' | grep 016b3bd621cf4aea76e91a496c4affae9e5a99c4ceca160465863c87fd6e0c78

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)

    Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)

    本文主要介紹了Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • docker部署應(yīng)用的三種方式

    docker部署應(yīng)用的三種方式

    越來越多的前端團(tuán)隊(duì)選擇用Docker部署前端項(xiàng)目,本文主要介紹了docker部署應(yīng)用的三種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Docker安裝運(yùn)行SRS的過程記錄

    Docker安裝運(yùn)行SRS的過程記錄

    SRS定位是運(yùn)營級(jí)的互聯(lián)網(wǎng)直播服務(wù)器集群,追求更好的概念完整性和最簡單實(shí)現(xiàn)的代碼,本文給大家介紹下Docker安裝運(yùn)行SRS的過程,感興趣的朋友跟隨小編一起看看吧
    2022-04-04
  • Docker容器數(shù)據(jù)卷技術(shù)介紹

    Docker容器數(shù)據(jù)卷技術(shù)介紹

    這篇文章主要為大家介紹了Docker容器數(shù)據(jù)卷技術(shù)介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 教你如何通過編寫dockerfile部署python項(xiàng)目

    教你如何通過編寫dockerfile部署python項(xiàng)目

    Dockerfile是一個(gè)放置在項(xiàng)目根目錄下的描述文件,可以利用 Docker 命令基于該文件構(gòu)建一個(gè)鏡像,下面這篇文章主要給大家介紹了關(guān)于如何通過編寫dockerfile部署python項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • 詳解docker?API管理接口增加CA安全認(rèn)證

    詳解docker?API管理接口增加CA安全認(rèn)證

    這篇文章主要介紹了docker?API管理接口增加CA安全認(rèn)證,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Docker創(chuàng)建鏡像兩種方法詳解

    Docker創(chuàng)建鏡像兩種方法詳解

    這篇文章主要介紹了 Docker創(chuàng)建鏡像兩種方法詳解的相關(guān)資料,Docker創(chuàng)建鏡像:一是使用docker commit命令,二是使用docker build命令和Dockerfile文件,需要的朋友可以參考下
    2016-12-12
  • Docker微服務(wù)的ETCD集群搭建教程詳解

    Docker微服務(wù)的ETCD集群搭建教程詳解

    這篇文章主要為大家介紹了關(guān)于Docker微服務(wù)的ETCD集群搭建教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • docker使用registry搭建本地鏡像倉庫實(shí)例詳解

    docker使用registry搭建本地鏡像倉庫實(shí)例詳解

    這篇文章主要介紹了docker使用registry搭建本地鏡像倉庫實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 使用遠(yuǎn)程Docker進(jìn)行集成測(cè)試的環(huán)境搭建過程

    使用遠(yuǎn)程Docker進(jìn)行集成測(cè)試的環(huán)境搭建過程

    使用docker可以幫助我們快速的搭建項(xiàng)目依賴環(huán)境,但是本地化的docker依賴,依然讓我們的代碼在測(cè)試時(shí),不夠純粹,對(duì)其各個(gè)運(yùn)行環(huán)境,都有本地docker安裝的要求
    2021-07-07

最新評(píng)論