首頁 > 軟體

使用Docker將容器目錄掛載到主機上的實現方法

2022-05-29 14:00:13

一、基本介紹

這裡我們主要介紹 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將容器目錄掛載到主機上內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com