使用Docker將容器目錄掛載到主機上的實現方法
一、基本介紹
這裡我們主要介紹 Docker 裡的一個命令,叫做 --mount
,其本質上來說和 --volume
命令並沒有太大區別,因為這兩個命令都是用來給容器提供一個掛載目錄。唯一的區別便是,容器的掛載類型不同,那麼效果也會有所不同。
容器的掛載類型:
bind
:將宿主機的指定目錄掛載到容器的指定目錄,以覆蓋的形式掛載(這也就意味著,容器指定目錄下的內容也會隨著消失)volume
:在宿主機的 Docker 存儲目錄下創建一個目錄,並掛載到容器的指定目錄(並不會覆蓋容器指定目錄下的內容)
在有些時候,由於容器內的目錄有著特殊作用,並不能以覆蓋的形式進行掛載。但又想掛載到宿主機上,這時我們便可以使用 volume
類型的掛載方式。像我們上面所說的 --mount
和 --volume
命令都是支持以這兩種類型的方式掛載,無非就是配置稍有不同。
兩種命令使用 bind
類型掛載區別:當宿主機上指定的目錄不存在時,我們使用 --volume
命令掛載時,便會自動的在宿主機上創建出相應目錄,而我們要是使用 --mount
命令來掛載,便會輸出 “ 報錯信息。
二、將容器目錄掛載到主機
1)使用 --volume
命令實現 bind
類型的掛載
[root@k8s-master01 ~]# docker run -d -it --name zhangsan \ -v /zhangsan:/usr/share/nginx/html \ nginx:1.21.0 [root@k8s-master01 ~]# echo "Hello World" > /zhangsan/index.html [root@k8s-master01 ~]# docker exec -it zhangsan /bin/bash root@3cad299c93aa:/# cd /usr/share/nginx/html/ root@3cad299c93aa:/usr/share/nginx/html# ls index.html root@3cad299c93aa:/usr/share/nginx/html# curl 127.0.0.1
可以看到,當我們使用 bind
類型的掛載時,容器內指定的目錄原有內容會被覆蓋。
2)使用 --mount
命令實現 bind
類型的掛載
[root@k8s-master01 ~]# docker run -d -it --name wangwu \ --mount type=bind,source=/zhangsan,destination=/usr/share/nginx/html \ nginx:1.21.0 [root@k8s-master01 ~]# docker exec -it wangwu /bin/bash root@474cf5ddd29f:/# cd /usr/share/nginx/html/ root@474cf5ddd29f:/usr/share/nginx/html# ls index.html root@474cf5ddd29f:/usr/share/nginx/html# curl 127.0.0.1
我們上面指定 type=bind
類型的原因是因為 --mount
命令默認掛載的類型就是 volume
類型,所以需要指定。
--mount
命令掛載格式:
bind
掛載類型:--mount [type=bind] source=/path/on/host,destination=/path/in/container[,...]
volume
掛載類型:--mount source=my-volume,destination=/path/in/container[,...]
3)使用 --volume
命令實現 volume
類型的掛載
[root@k8s-master01 ~]# docker run -d -it --name volume \ -v zhangsan:/usr/share/nginx/html \ nginx:1.21.0 [root@k8s-master01 ~]# docker exec -it volume /bin/bash root@dced26ccb8f0:/# cd /usr/share/nginx/html/ root@dced26ccb8f0:/usr/share/nginx/html# ls 50x.html index.html
4)使用 --mount
命令實現 volume
類型的掛載
[root@k8s-master01 ~]# docker run -d -it --name mount \ --mount source=mount,destination=/usr/share/nginx/html \ nginx:1.21.0 [root@k8s-master01 ~]# docker exec -it mount /bin/bash root@7e63ca69f135:/# cd /usr/share/nginx/html/ root@7e63ca69f135:/usr/share/nginx/html# ls 50x.html index.html
查看宿主機的掛載目錄
其實,使用 bind
或是 mount
類型的掛載方式,區別主要就是在於有 /
和沒 /
,有 /
就會掛載到宿主機的指定目錄,沒有 /
則是會掛載到宿主機 Docker 所在的目錄中。
到此這篇關於使用Docker將容器目錄掛載到主機上的實現方法的文章就介紹到這瞭,更多相關Docker將容器目錄掛載到主機上內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Dockerfile 中 VOLUME 與 docker -v 的區別說明
- Docker中數據卷(volume)管理的兩種方式
- Docker 存儲管理的幾種方式
- 詳解Docker在哪裡保存日志文件
- Docker安裝LNMP環境的詳細過程(可部署TP項目)