站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        docker存儲有哪幾種方式

        docker有四種存儲方式:1、“默認(rèn)儲存”,數(shù)據(jù)保存在運行的容器中,容器刪除后,數(shù)據(jù)也隨之刪除;2、“volumes數(shù)據(jù)卷”;3、“bind mounts掛載”,直接掛載主機文件系統(tǒng)的任何目錄或文件;4、“tmpfs mount”。

        docker存儲有哪幾種方式

        本教程操作環(huán)境:linux5.9.8系統(tǒng)、docker-1.13.1版、Dell G3電腦。

        docker容器的幾種存儲方式

        容器的存儲可以分為兩大類:

        一種是與鏡像相關(guān)的即我們在《docker容器技術(shù)基礎(chǔ)之聯(lián)合文件系統(tǒng)OverlayFS》一文提到的容器層Copy-On-Write特性。默認(rèn)情況下,在容器內(nèi)創(chuàng)建的所有文件都存儲在可寫容器層上,這種直接將文件存儲在容器層的方式數(shù)據(jù)難以持久化和共享,由于依賴存儲驅(qū)動與使用直接寫入主機文件系統(tǒng)的數(shù)據(jù)卷相比,這種額外的抽象會降低性能 。

        另一中是宿主機存儲即通過將宿主機目錄綁定或掛在到容器中使用,容器停止后數(shù)據(jù)也能持久化。主要介紹后者。

        幾種存儲掛載方式

        這里我們根據(jù)數(shù)據(jù)存儲在 Docker 主機上的不同位置繪制如下圖:

        docker存儲有哪幾種方式

        docker四種存儲方式:默認(rèn)、volumes數(shù)據(jù)卷、bind mounts掛載、tmpfs mount(僅在linux環(huán)境中提供),其中volumes、bind mounts兩種實現(xiàn)持久化容器數(shù)據(jù)。

        1.默認(rèn)儲存

        數(shù)據(jù)保存在運行的容器中,容器刪除后,數(shù)據(jù)也隨之刪除

        2.bind mounts

        綁定掛載與卷相比,功能有限。使用綁定掛載時,主機上的文件或目錄會掛載到容器中。文件或目錄由其在主機上的完整路徑引用。目錄不需要已經(jīng)存在于 Docker 主機上,如果不存在,docker會幫我們創(chuàng)建。 注意一下,只能自動創(chuàng)建目錄哦。

        我們通過 -v 選項綁定掛載一個目錄 /nginx/html 到容器中看看

        docker run -dt -v /nginx/html:/usr/share/nginx/html --name nginx nginx

        通過docker inspect nginx 查看容器 Mounts字段

        "Mounts": [     {         "Type": "bind",         "Source": "/nginx/html",         "Destination": "/usr/share/nginx/html",         "Mode": "",         "RW": true,         "Propagation": "rprivate"     } ],

        接著我們在docker主機上創(chuàng)建一個index.html并寫入hello nginx,然后訪問容器IP,顯然我們的掛載已經(jīng)生效了。

        [root@localhost ~]# echo "hello nginx" >  /nginx/html/index.html [root@localhost ~]# curl 172.17.0.4 hello nginx

        這里有一個問題,我們可以通過docker主機修改文件使容器內(nèi)文件生效,反過來也一樣,容器可以修改、創(chuàng)建和刪除主機文件系統(tǒng)上的內(nèi)容。處理這個問題我們可以在創(chuàng)建容器的時候配置掛載目錄的權(quán)限,比如下面的只讀權(quán)限:

        docker run -dt -v /nginx/html:/usr/share/nginx/html:ro --name nginx nginx

        所以在我們使用綁定掛載的時候,你操作的是主機文件系統(tǒng),你必須清楚如下:

        你掛載的目錄包含哪些內(nèi)容,以免對其他應(yīng)用造成影響。

        你的容器是否應(yīng)該有權(quán)操作這些目錄。

        3.volumes數(shù)據(jù)卷

        volume存儲卷由 Docker 創(chuàng)建和管理,我們可以使用該docker volume create命令顯式的創(chuàng)建卷,或者在容器創(chuàng)建時創(chuàng)建卷。

        [root@localhost ~]# docker volume create nginx_volume nginx_volume [root@localhost volumes]# docker inspect  nginx_volume [     {         "CreatedAt": "2021-08-12T01:58:04-04:00",         "Driver": "local",         "Labels": {},         "Mountpoint": "/var/lib/docker/volumes/nginx_volume/_data",         "Name": "nginx_volume",         "Options": {},         "Scope": "local"     } ]

        可以看到掛載點處于docker的根目錄/var/lib/docker/volumes下

        通過docker volume rm/prune 清除單個或所有未再使用的卷,可以通過docker 命令來管理卷是對比綁定掛載的一個優(yōu)勢。

        [root@localhost ~]# docker volume ls DRIVER    VOLUME NAME local     owncloud-docker-server_files local     owncloud-docker-server_mysql local     owncloud-docker-server_redis [root@localhost ~]# 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: owncloud-docker-server_files owncloud-docker-server_mysql owncloud-docker-server_redis  Total reclaimed space: 199.4MB

        在創(chuàng)建容器時如果未指定容器掛載的源則docker會自動為我們創(chuàng)建一個匿名卷,同樣位于docker根目錄下。

        [root@localhost volumes]# docker run -dt -v /usr/share/nginx/html --name nginx_with_volume nginx d25bdfce9c7ac7bde5ae35067f6d9cf9f0cd2c9cbea6d1bbd7127b3949ef5ac6 [root@localhost volumes]# docker volume ls  DRIVER    VOLUME NAME local     d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980 local     nginx_volume [root@localhost volumes]# ls /var/lib/docker/volumes/ backingFsBlockDev  d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980  metadata.db  nginx_volume

        當(dāng)我們創(chuàng)建掛載卷之后,此時的存儲與bind mounts是一致,不過當(dāng) docker 主機不能保證具有給定的目錄或文件結(jié)構(gòu)時,卷可幫助我們將 docker 主機的配置與容器運行時分離。這樣一來當(dāng)我們需要將數(shù)據(jù)從一臺 Docker 主機備份、還原或遷移到另一臺時,卷就很方便了,可以脫離host path的限制。

        在使用綁定掛載和卷時我們要注意下面?zhèn)鞑ジ采w原則:

        docker存儲有哪幾種方式

        掛載一個空卷時:容器內(nèi)目錄的內(nèi)容會傳播(復(fù)制)到卷中。

        綁定掛載或非空卷時:容器內(nèi)目錄的內(nèi)容會被卷或綁定的主機目錄覆蓋。

        4.tmpfs mount

        tmpfs掛載僅適用于linux主機,當(dāng)我們使用tmpfs掛載創(chuàng)建容器時,容器可以在容器的可寫層之外創(chuàng)建文件。將數(shù)據(jù)保留在內(nèi)存中,當(dāng)容器停止時,寫入的數(shù)據(jù)也將被移除。主要用于臨時存儲不想保留在主機或容器可寫層中的敏感文件。

        通過–tmpfs選項掛載一個內(nèi)存塊。

        docker run -dt --name busybox_tmpfs --tmpfs /etc/running busybox

        通過–mount的方式帶上參數(shù),指定臨時存儲大小。

        docker run -dt --name busybox_tmpfs2 --mount type=tmpfs,tmpfs-size=2048,destination=/etc/running busybox

        存儲數(shù)據(jù)共享

        在容器之間共享數(shù)據(jù)主要有兩種方法,第一種比較簡單,只需要將目錄或者volume掛載到多個容器中即可。這里不做贅述,我們來看一下通過中間容器實現(xiàn)共享的方式。

        我們創(chuàng)建一個中間容器,包含綁定掛載目錄和一個卷。

        docker create -v /share:/volume1 -v /volume2  --name volume_share  busybox

        在我們需要共享的容器中通過選項–volumes-from拿過來用即可

        docker run -d -t --volumes-from volume_share  --name container1  busybox

        我們inspect檢查一下Mounts字段,此時container1已經(jīng)掛載到了一個bind目錄和一個volume

        "Mounts": [     {         "Type": "bind",         "Source": "/share",         "Destination": "/volume1",         "Mode": "",         "RW": true,         "Propagation": "rprivate"     },     {         "Type": "volume",         "Name": "21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e",         "Source": "/var/lib/docker/volumes/21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e/_data",         "Destination": "/volume2",         "Driver": "local",         "Mode": "",         "RW": true,         "Propagation": ""     } ],

        推薦學(xué)習(xí):《docker視頻教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 亚洲午夜精品久久久久久人妖| 国产日韩精品无码区免费专区国产| 成人精品视频99在线观看免费| 国产精品99久久不卡| 麻豆成人久久精品二区三区免费| 人精品影院| 99热国内精品| 亚洲中文精品久久久久久不卡| 国产精品部在线观看| 国产精品99久久99久久久| 亚洲国产婷婷综合在线精品| 高清日韩精品一区二区三区 | 日本久久久精品中文字幕| 久久夜色精品国产噜噜麻豆| 久久久久久国产精品无码下载| 国产成人精品一区在线| 国产在线拍揄自揄视精品不卡 | 国内精品久久久久久久coent| 久久久91精品国产一区二区三区| 精品人妻中文字幕有码在线| 亚洲欧美日韩国产精品专区 | 久久九九有精品国产23百花影院| 国产亚洲精品无码成人| 亚洲AV永久无码精品| 中文字幕日韩精品无码内射| 无码精品久久一区二区三区| 精品一区二区三区免费观看| 国产精品男男视频一区二区三区| 亚洲天堂久久精品| 中文字幕精品一区二区日本| 欧洲精品视频在线观看| 2021国产精品视频网站| 欧美久久精品一级c片片| 亚洲精品理论电影在线观看| 久久久久免费精品国产| 真实国产乱子伦精品免费| 99久久国产主播综合精品| 隔壁老王国产在线精品| 精品欧美一区二区三区久久久| 久久亚洲AV永久无码精品| 久久久久九九精品影院|