中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker常用命令之volume怎么使用

發布時間:2023-03-09 10:22:39 來源:億速云 閱讀:192 作者:iii 欄目:開發技術

這篇文章主要講解了“docker常用命令之volume怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“docker常用命令之volume怎么使用”吧!

    1、docker volume方式

    在Docker中,要想實現數據的持久化(所謂Docker的數據持久化即數據不隨著Container的結束而結束),需要將數據從宿主機掛載到容器中。

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

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

    docker常用命令之volume怎么使用

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

    注意:如果volume是空的而container中的目錄有內容,那么docker會將container目錄中的內容拷貝到volume中,但是如果volume中已經有內容,則會將container中的目錄覆蓋。

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

    bind mount在不同的宿主機系統時不可移植的,比如Windows和Linux的目錄結構是不一樣的,bind mount所指向的host目錄也不能一樣。

    這也是為什么bind mount不能出現在Dockerfile中的原因,因為這樣Dockerfile就不可移植了。

    有幾點需要注意:

    • 1、host機器的目錄路徑必須為全路徑(準確的說需要以/或~/開始的路徑),不然docker會將其當做volume而不是路徑來處理

    • 2、如果host機器上的目錄不存在,docker會自動創建該目錄

    • 3、如果container中的目錄不存在,docker會自動創建該目錄

    • 4、如果container中的目錄已經有內容,那么docker會使用host上的目錄將其覆蓋掉

    (3)tmpfs:掛載存儲在宿主機系統的內存中,而不會寫入宿主機的文件系統;(一般都不會用的方式)

    2、Volume的基本使用

    2.1 管理卷

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

    例如,這里我們創建一個自定義的容器卷,名為"edc-nginx-vol":

    docker常用命令之volume怎么使用

    2.2 創建使用指定卷的容器

    有了自定義容器卷,我們可以創建一個使用這個數據卷的容器,這里我們以nginx為例:

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

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

    如果沒有通過-v指定,那么Docker會默認幫我們創建匿名數據卷進行映射和掛載。

    創建好容器之后,我們可以進入容器里面看看:

    docker常用命令之volume怎么使用

    可以看到有兩個默認頁,這時我們新啟動一個SSH連接到宿主機去到剛剛創建的數據卷里邊看看:

    docker常用命令之volume怎么使用

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

    在容器里邊的改動,我們可以在宿主機里感知,而在宿主機里面的改動,在容器里邊可以感知到。

    這時,如果我們手動stop并且remove當前nginx容器,我們會發現容器卷里面的文件還在,并沒有被刪除掉。

    由此可以驗證,在數據卷里邊的東西是可以持久化的。如果下次還需要創建一個nginx容器,那么還是復用當前數據卷里面的文件。

    此外,我們還可以啟動多個nginx容器實例,并且共享同一個數據卷,復用性和擴展性較強。

    2.3 清理卷

    如果不再使用自定義數據卷了,那么可以手動清理掉:

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

    3、Bind Mounts的基本使用

    3.1 使用卷創建一個容器

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

    這里指定了將宿主機上的 /app/wwwroot 目錄(如果沒有會自動創建)掛載到 /usr/share/nginx/html (這個目錄是yum安裝nginx的默認網頁目錄)。

    這時我們再次進入容器內部看看:

    docker常用命令之volume怎么使用

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

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

    Step1.新建一個index.html

    docker常用命令之volume怎么使用  

    Step2.在容器中查看

    docker常用命令之volume怎么使用

    3.2 驗證綁定

    docker inspect edc-nginx

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

    docker常用命令之volume怎么使用

    3.3 清理

    docker stop edc-nginx
    docker rm edc-nginx

    同volumes一樣,當我們清理掉容器之后,掛載目錄里面的文件仍然還在,不會隨著容器的結束而消失,從而實現數據持久化。

    3.4 應用案例

    在服務治理組件中,服務發現組件是一個最常用的組件之一,Consul是一個流行的服務發現開源項目,Consul推薦我們使用配置文件的方式注冊服務信息。

    因此,我們常常會將填寫好服務注冊配置文件放在宿主機的一個文件目錄下將其掛載到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的方式將宿主機上的/XiLife/consul/data/server1目錄掛載到了容器的/consul/data目錄下,還將/XiLife/consul/conf/server1目錄掛載到了容器的/consul/config目錄下,而容器下的兩個目錄/consul/data和/consul/config則是我們指定的存放agent數據和配置文件的地方。

    因此,宿主機上的配置文件的變化會及時反映到容器中,比如我們在宿主機上的目錄下更新了配置文件,那么只需要reload一下Consul的容器實例即可:

    docker exec consul-server consul reload

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

    4、移除未使用的數據卷

    [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、根據volume查詢容器id

    [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

    感謝各位的閱讀,以上就是“docker常用命令之volume怎么使用”的內容了,經過本文的學習后,相信大家對docker常用命令之volume怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    武穴市| 怀来县| 荃湾区| 剑阁县| 体育| 同心县| 和林格尔县| 巴彦淖尔市| 个旧市| 博乐市| 庄浪县| 营山县| 驻马店市| 南康市| 清苑县| 白河县| 崇义县| 固原市| 郴州市| 夏河县| 三河市| 万年县| 海原县| 大石桥市| 施甸县| 清徐县| 枞阳县| 应城市| 龙山县| 镇宁| 饶阳县| 芜湖县| 湖州市| 邹城市| 石棉县| 丘北县| 梁平县| 南漳县| 定襄县| 民丰县| 惠东县|