0


Docker -v 挂载主机目录到容器中(及数据卷容器)

一、简单挂载

  • 使用 Docker 的过程中,经常需要挂载主机上的目录或文件到 Docker 容器中,以实现数据的共享或持久化。而 docker run -v 命令便是用于挂载主机目录到 Docker 容器中的常用命令。
  • 在创建启动容器时,使用 -v 参数设置数据卷# 挂载单个$ docker run ... -v[主机目录]:[容器目录][镜像名称]# 挂载多个$ docker run -v[主机目录1]:[容器目录1]-v[主机目录2]:[容器目录2]-v[主机目录3]:[容器目录3][镜像名称]注意事项:- 目录必须是绝对路径- 如果目录不存在,会自动创建- 可以挂载多个数据卷,写多个 -v 就行

二、简单挂载案例

  • centos 举例挂载# 拉取最新 centos$ docker pull centos# 一般可以放在 root 目录下,这里为了测试,随便写个文件名 dzmtest 作为效果区分$ docker run -it--name dzm -v /dzmtest/data:/dzmtest/data_container centos /bin/bash
  • 进入容器后,查看容器目录# 或者 $ ls -l$ ls# dzmtest 文件夹就被创建了,里面还有个 data_container 文件夹bin dev dzmtest etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  • 查看宿主机目录,需要回到宿主机最外层# 或者 $ ls -l$ ls# 需要通过 $ cd .. 回到宿主机文件最外层,根目录,会发现创建好了 dzmtest,里面还有个 data 文件夹Docker bin boot dev dzmtest etc home init lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var
  • 测试数据同步功能,在宿主机(/dzmtest/data)或容器(/dzmtest/data_container)内添加文件,或修改文件内容都会互相同步。# 或 $ cd /dzmtest/data_container$ cd /dzmtest/data# 随便创建一个文件$ touch dzm.txt如果创建文件报错 touch: cannot touch 'dzm.txt': Permission denied 是没有权限,加个权限就行。如果报错 -bash: cd: data/: Permission denied 也是一样,加个最高权限就行了。# 回到上层文件夹$ cd..# 对 data 文件添加权限# chmod 修改权限指令# -R 对目前目录下的所有档案与子目录进行相同的权限变更# 777 是所有用户都拥有最高权限$ sudochmod-R777 ./data/然后再次执行创建文件命令,就能创建成功了dengzemiao@DESKTOP-D06B2J2:/dzmtest/data$ ls# 宿主机上文件就创建好了,然后去容器内的绑定文件夹内查看下是否存在文件dzm.txt``````[root@037524b9fb04 /]# cd dzmtest/data_container/[root@037524b9fb04 data_container]# ls# 容器内也存在同样的文件了,这样就实现了共享dzm.txt
  • 举例挂载多个目录# 通过 \ + 回车进行换行输入$ docker run -it--name dzm \>-v /dzmtest/data1:/dzmtest/data1 \>-v /dzmtest/data2:/dzmtest/data2 \> centos /bin/bash

三、数据卷容器

  • 如果是多容器数据共通,那么按上面的办法就是每个容器都关联宿主机的一个文件夹,这样就能多容器数据共通还有种方式就是 数据卷容器,就是创建一个容器专门挂载宿主机文件夹,然后其他容器关联到这个容器即可。image.png1、创建启动 c3 数据卷容器,使用 -v 设置数据卷# -v /volume 这种写法会在容器内创建一个 /volume 目录,然后 docker 会在宿主机上自动分配一个目录作为绑定目录$ docker run -it--name=c3 -v /volume centos:7 /bin/bash# 执行命令后,如何查看容器自动分配的宿主机绑定目录呢$ docker inspect c3[{......"HostConfig":{ // 如果指定数据卷目录,这里会列出绑定信息 "Binds": null, ......}, ...... // 挂着信息 "Mounts":[{"Type":"volume", "Name":"8d89f84aa486fcf706e180e6aa17649929147bdbc32e8aa3391b4dffdce27d09", // 宿主机中的目录 "Source":"/var/lib/docker/volumes/8d89f84aa486fcf706e180e6aa17649929147bdbc32e8aa3391b4dffdce27d09/_data", // 容器中的目录 "Destination":"/dzmtest1", "Driver":"local", "Mode":"", "RW": true, "Propagation":""}], ..... }]dengzemiao@DESKTOP-D06B22、创建启动 c1 c2 容器,使用 --volumes-from 设置数据卷容器$ docker run -it--name=c1 --volumes-from c3 centos:7 /bin/bash$ docker run -it--name=c2 --volumes-from c3 centos:7 /bin/bash3、然后就在 c1 c2 容器中正常增删改文件,实现互通了,同时也可以单独访问 c3 数据卷容器做处理。
标签: docker 容器 运维

本文转载自: https://blog.csdn.net/zz00008888/article/details/131924286
版权归原作者 卡尔特斯 所有, 如有侵权,请联系我们删除。

“Docker -v 挂载主机目录到容器中(及数据卷容器)”的评论:

还没有评论