docker 三种挂载文件路径方式
為何要為容器進(jìn)行文件掛載
為了持久化docker容器產(chǎn)生的數(shù)據(jù)(數(shù)據(jù)文件/配置文件/日志文件), 通常會(huì)掛載(映射)產(chǎn)生數(shù)據(jù)的容器內(nèi)路徑到主機(jī)路徑上.
用處:
3種掛載方式
1.指定路徑掛載
首先查看當(dāng)前的數(shù)據(jù)卷和容器列表
當(dāng)前只有1個(gè)運(yùn)行中的容器和1個(gè)數(shù)據(jù)卷(volume)
語(yǔ)法:
-v /主機(jī)路徑:/容器內(nèi)路徑
例子 我們創(chuàng)建1個(gè)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]$這是我們?cè)L問(wèn) tomcat主頁(yè),見(jiàn)到tomcat啟動(dòng)了, 但是什么也沒(méi)有, 因?yàn)槿萜鲀?nèi)的webapps是空的
通過(guò)查看容器信息, 我們可以看到一條掛載記錄
這時(shí)我們把一些東西webapps初始的管理項(xiàng)目copy 到掛載點(diǎn) /home/gateman/docker/webapps 上
然后刷新tomcat主頁(yè), 能正常顯示了
證明了掛載點(diǎn)有效的.
我們?cè)俨榭聪聰?shù)據(jù)卷列表
[gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 [gateman@i-93f6y1io docker]$數(shù)據(jù)卷并沒(méi)有增加
說(shuō)明 指定路徑掛載并不會(huì)創(chuàng)建數(shù)據(jù)卷(volume)
2.具名掛載
可以講具名掛載和匿名掛載都不用指定主機(jī)的掛載路徑, 由docker自己管理(通常在/var/lib/docker/volumn/ 下), 只需要指定容器里需要映射出來(lái)的路徑。 而且會(huì)增加1個(gè)數(shù)據(jù)卷。
具名就是會(huì)給這個(gè)新增的數(shù)據(jù)卷添加1個(gè)名字。
匿名就是給這個(gè)數(shù)據(jù)卷產(chǎn)生1個(gè)隨機(jī)token作為數(shù)據(jù)卷名字
語(yǔ)法
-v 數(shù)據(jù)卷名:/容器內(nèi)路徑
例子
我們創(chuàng)建多個(gè)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可以見(jiàn)到1個(gè)新創(chuàng)建的容器。 這時(shí)訪問(wèn)這個(gè)tomcat, 也是沒(méi)有主頁(yè)的, 因?yàn)槿萜鲀?nèi)webapps是空的
這時(shí)我們查看下這個(gè)容器的掛載信息
可以很清晰見(jiàn)到, 1個(gè)volume被指定了, 名字就是我們命令中定義的。
掛載點(diǎn)是/var/lib/docker/volumes/vol_has_name_tomcat/_data
我們?cè)俨榭聪聰?shù)據(jù)卷列表
[gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 local vol_has_name_tomcat [gateman@i-93f6y1io docker]$1個(gè)新的數(shù)據(jù)卷被創(chuàng)建
我們把一些default東西copy到掛載點(diǎn)(要加sodu), 主頁(yè)就出來(lái)了
[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.匿名掛載
語(yǔ)法
-v /容器內(nèi)路徑
不用指定數(shù)據(jù)卷名
例子
[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]$可以見(jiàn)到 1個(gè)新的volume 被創(chuàng)建, 而且名字是一堆無(wú)意義的字符
掛載點(diǎn)同樣也是很冗長(zhǎng),
所以一般情況不建議用匿名掛載
總結(jié)
以上是生活随笔為你收集整理的docker 三种挂载文件路径方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为 springboot 添加 debu
- 下一篇: 转: centos7 安装 juypte