![bea3596dd7f788d1b49202c15a3e2d9c.png](https://img.php1.cn/3cd4a/1eebe/cd5/0a0ce631ec450943.webp)
平常我们搭建容器最重要的是文件管理的保护和使用,一般正常的是用-v映射容器中的文件夹到本地,这样我们可以直接在主机编写文件,没必要再进入容器进行修改
一、单个容器数据卷映射
举例:新建一个容器可以映射本地/data/nginx/conf.d到容器中/etc/nginx/conf.d
docker run -d -it -v /data/nginx/conf.d:/etc/nginx/conf.d -p 80:80 --name=nginx nginx /bin/bash
这样可以通过编写本机/data/nginx/conf.d/*.conf实现nginx的使用
二、多个容器共同访问数据卷实现数据的实时同步
1、创建nginx01
docker run -d -it -v nginx:/etc/nginx/conf.d -p 81:80 --name=nginx01 nginx /bin/bash
这里的-v nginx:/etc/nginx/conf.d这里的nginx是一个volum卷标名称(nginx前面没有任何路径标识),也可以像上面一样指定一个本地路径,这里单独的nginx用来更好讲解volume数据卷标
用docker volume ls可以查看系统的所有volume卷标
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1eebe/cd5/8ad8f3bf8da691df.webp?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16)
docker volume inspect nginx用来查看详细的nginx卷标信息及主机路径
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_19,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1eebe/cd5/e3aa5425383ba10d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_19,color_FFFFFF,t_70,g_se,x_16)
这样可以通过编写本机"/var/lib/docker/volumes/nginx/_data/*.conf实现nginx的使用
2、创建nginx02容器,挂载mysql01容器中的数据卷
docker run -d -it -p 82:80 --name=nginx02 --volumes-from=nginx01 nginx /bin/bash
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1eebe/cd5/7cccb7e4b6cb5cb8.webp?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16)
可以使用inspect命令来查看nginx02的卷标挂载位置可以看到和nginx01一样
docker inspect nginx02
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_18,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1eebe/cd5/a1be7872e8d4934f.webp?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_18,color_FFFFFF,t_70,g_se,x_16)
3、这样我们进入/var/lib/docker/volumes/nginx/_data,创建一个song.conf可以同时同步到nginx01和nginx02
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_19,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1eebe/cd5/8ad8f3bf8da691df.webp?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_19,color_FFFFFF,t_70,g_se,x_16)
可以看到不管是nginx01,nginx02还是主机更新的文件都可以在容器中更新
三、写一个简单的Dockerfile来时间卷标管理
1、编写一个简单的Dockerfile文件
vim Dockerfile (构建指令可以参考博客dockers章节 )
FROM nginx
MAINTAINER usersong
VOLUME ["/etc/nginx/conf.d"]
CMD echo "----end---"
CMD /bin/bash
2、运行Dockerfile文件
通过docker build -f Dockerfile -t nginx:v1 .来运行dockerfile,-t指定镜像名称和版本,记得后面有一个"." dockerfile构建过程就是上面写的4部
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_18,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1e618/c5a/d5d40da532c3a782.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_18,color_FFFFFF,t_70,g_se,x_16)
这个就是我们用dockerfile自己创建的一个容器nginx:v1
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1eebe/cd5/7cccb7e4b6cb5cb8.webp?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16)
3、开始用编写的镜像创建容器,并查看容器的mounts信息,这样可以实现提前构建好volume卷标信息
docker run -d -it -p 81:80 --name=nginx01 nginx:v1 /bin/bash
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/1eebe/cd5/d34245582687a4e6.webp?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16)
docker run -d -it -p 82:80 --name=nginx02 nginx:v1 /bin/bash
![watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6aKX6I2J5Li2,size_20,color_FFFFFF,t_70,g_se,x_16)