docker 三种挂载文件路径方式
為何要為容器進行文件掛載
為了持久化docker容器產生的數據(數據文件/配置文件/日志文件), 通常會掛載(映射)產生數據的容器內路徑到主機路徑上.
用處:
3種掛載方式
1.指定路徑掛載
首先查看當前的數據卷和容器列表
當前只有1個運行中的容器和1個數據卷(volume)
語法:
-v /主機路徑:/容器內路徑
例子 我們創建1個tomcat容器
docker run -d -p 3348:8080 -v /home/gateman/docker/webapps:/usr/local/tomcat/webapps --name tomcat_spe_mount tomcat
[gateman@i-93f6y1io docker]$ pwd /home/gateman/docker [gateman@i-93f6y1io docker]$ mkdir -p webapps [gateman@i-93f6y1io docker]$ ls run_portainer.sh scripts webapps [gateman@i-93f6y1io docker]$ docker run -d -p 3348:8080 -v /home/gateman/docker/webapps:/usr/local/tomcat/webapps --name tomcat_spe_mount tomcat 052e6104aeaf65f56e53535d249d5417701560ce6332dbcc764dfb4cc6435bae [gateman@i-93f6y1io docker]$這是我們訪問 tomcat主頁,見到tomcat啟動了, 但是什么也沒有, 因為容器內的webapps是空的
通過查看容器信息, 我們可以看到一條掛載記錄
這時我們把一些東西webapps初始的管理項目copy 到掛載點 /home/gateman/docker/webapps 上
然后刷新tomcat主頁, 能正常顯示了
證明了掛載點有效的.
我們再查看下數據卷列表
[gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 [gateman@i-93f6y1io docker]$數據卷并沒有增加
說明 指定路徑掛載并不會創建數據卷(volume)
2.具名掛載
可以講具名掛載和匿名掛載都不用指定主機的掛載路徑, 由docker自己管理(通常在/var/lib/docker/volumn/ 下), 只需要指定容器里需要映射出來的路徑。 而且會增加1個數據卷。
具名就是會給這個新增的數據卷添加1個名字。
匿名就是給這個數據卷產生1個隨機token作為數據卷名字
語法
-v 數據卷名:/容器內路徑
例子
我們創建多個tomcat 容器
[gateman@i-93f6y1io docker]$ docker run -d -p 3349:8080 -v vol_has_name_tomcat:/usr/local/tomcat/webapps --name tomcat_has_name_mount tomcat d0bc64be6bdc9aedaec4bf22777eeea8a47106df90e05c929e31f540541f79df [gateman@i-93f6y1io docker]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0bc64be6bdc tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:3349->8080/tcp tomcat_has_name_mount 052e6104aeaf tomcat "catalina.sh run" 15 minutes ago Up 15 minutes 0.0.0.0:3348->8080/tcp tomcat_spe_mount 5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 13 days 0.0.0.0:3346->9000/tcp condescending_cartwright [gateman@i-93f6y1io docker]$ docker exec -it tomcat_has_name_mount /bin/bash root@d0bc64be6bdc:/usr/local/tomcat# ls /usr/local/tomcat/webapps root@d0bc64be6bdc:/usr/local/tomcat# exit exit可以見到1個新創建的容器。 這時訪問這個tomcat, 也是沒有主頁的, 因為容器內webapps是空的
這時我們查看下這個容器的掛載信息
可以很清晰見到, 1個volume被指定了, 名字就是我們命令中定義的。
掛載點是/var/lib/docker/volumes/vol_has_name_tomcat/_data
我們再查看下數據卷列表
[gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 local vol_has_name_tomcat [gateman@i-93f6y1io docker]$1個新的數據卷被創建
我們把一些default東西copy到掛載點(要加sodu), 主頁就出來了
[gateman@i-93f6y1io docker]$ sudo cp -a ~/docker/scripts/mount/webapps/* /var/lib/docker/volumes/vol_has_name_tomcat/_data/ [sudo] gateman 的密碼: [gateman@i-93f6y1io docker]$ docker exec -it tomcat_has_name_mount /bin/bash root@d0bc64be6bdc:/usr/local/tomcat# ls /usr/local/tomcat/webapps ROOT docs examples host-manager manager root@d0bc64be6bdc:/usr/local/tomcat#3.匿名掛載
語法
-v /容器內路徑
不用指定數據卷名
例子
[gateman@i-93f6y1io docker]$ docker run -d -p 3350:8080 -v /usr/local/tomcat/webapps --name tomcat_ano_mount tomcat 132f575e0345ef5808e250c3b18741b294d4bb3e61a1ac88d8b6a9b4d2a76a79 [gateman@i-93f6y1io docker]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 132f575e0345 tomcat "catalina.sh run" 3 seconds ago Up 3 seconds 0.0.0.0:3350->8080/tcp tomcat_ano_mount d0bc64be6bdc tomcat "catalina.sh run" 38 minutes ago Up 38 minutes 0.0.0.0:3349->8080/tcp tomcat_has_name_mount 052e6104aeaf tomcat "catalina.sh run" 53 minutes ago Up 53 minutes 0.0.0.0:3348->8080/tcp tomcat_spe_mount 5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 13 days 0.0.0.0:3346->9000/tcp condescending_cartwright [gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local 5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 local vol_has_name_tomcat [gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_ano_mount [{volume 5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb /var/lib/docker/volumes/5889eed1cc2a05c3f54d69db7c95178b14a3821b6b02a341f3ac717d63ea2beb/_data /usr/local/tomcat/webapps local true }] [gateman@i-93f6y1io docker]$可以見到 1個新的volume 被創建, 而且名字是一堆無意義的字符
掛載點同樣也是很冗長,
所以一般情況不建議用匿名掛載
總結
以上是生活随笔為你收集整理的docker 三种挂载文件路径方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为 springboot 添加 debu
- 下一篇: 转: centos7 安装 juypte