docker 三种挂载文件路径方式 您所在的位置:网站首页 卷内目录中文件编号怎么填写 docker 三种挂载文件路径方式

docker 三种挂载文件路径方式

2024-01-03 17:35| 来源: 网络整理| 查看: 265

为何要为容器进行文件挂载

为了持久化docker容器产生的数据(数据文件/配置文件/日志文件), 通常会挂载(映射)产生数据的容器内路径到主机路径上.

用处:

不用进入容器内就能访问配置容器内数据删除容器时能保留数据 3种挂载方式 指定路径挂载具名挂载匿名挂载 1.指定路径挂载

首先查看当前的数据卷和容器列表 当前只有1个运行中的容器和1个数据卷(volume)

[gateman@i-93f6y1io docker]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b82adf8f3f5 mysql:latest "docker-entrypoint.s…" 7 days ago Exited (0) 7 days ago mysql01 5d1736f42fd3 portainer/portainer "/portainer" 13 days ago Up 12 days 0.0.0.0:3346->9000/tcp condescending_cartwright [gateman@i-93f6y1io docker]$ [gateman@i-93f6y1io docker]$ docker volume ls DRIVER VOLUME NAME local ad53aaa75e87f4e8c176f7f6d6eaa6819bcf5f88e70bc7b690fe70dad44ba261 [gateman@i-93f6y1io docker]$ 语法:

-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是空的 在这里插入图片描述通过查看容器信息, 我们可以看到一条挂载记录

[gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_spe_mount [{bind /home/gateman/docker/webapps /usr/local/tomcat/webapps true rprivate}] [gateman@i-93f6y1io docker]$

这时我们把一些东西webapps初始的管理项目copy 到挂载点 /home/gateman/docker/webapps 上 然后刷新tomcat主页, 能正常显示了

[gateman@i-93f6y1io docker]$ cp -a ~/docker/scripts/mount/webapps/* /home/gateman/docker/webapps/ [gateman@i-93f6y1io docker]$ docker exec -it tomcat_spe_mount /bin/bash root@052e6104aeaf:/usr/local/tomcat# ls /usr/local/tomcat/webapps ROOT docs examples host-manager manager root@052e6104aeaf:/usr/local/tomcat# exit exit [gateman@i-93f6y1io docker]$

在这里插入图片描述 证明了挂载点有效的.

我们再查看下数据卷列表

[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是空的 在这里插入图片描述 这时我们查看下这个容器的挂载信息

[gateman@i-93f6y1io docker]$ docker inspect --format="{{.Mounts}}" tomcat_has_name_mount [{volume vol_has_name_tomcat /var/lib/docker/volumes/vol_has_name_tomcat/_data /usr/local/tomcat/webapps local z true }] [gateman@i-93f6y1io docker]$

可以很清晰见到, 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 被创建, 而且名字是一堆无意义的字符

挂载点同样也是很冗长,

所以一般情况不建议用匿名挂载



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有