使用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!

推薦閱讀: