一、什么是容器数据卷
1、数据卷出现原因:将应用和环境打包成一个镜像。但数据放到容器中,容器关闭,数据会丢失。为了数据持久化,希望可以将容器内的数据存放到本地,容器之前,容器和本地可以实现数据共享,出现了数据卷。
2、数据卷:将容器内的目录,挂载到linux,宿主机上。可以实现容器的持久化和同步操作,容器间也可以数据共享
二、使用数据卷
(一)、使用命令挂载 ----使用多个-v可以挂载多个目录
语句:-v 主机目录:容器内目录
案例:docker run -d -it --name centos1 -v /home/ceshi:/home centos /bin/bash-----将容器home目录挂载到linux本机的ceshi文件夹
验证是否挂载成功
docker inspect 容器id-----出现红框内的数据说明挂载成功
实现1,在容器内home文件夹创建文件,ceshi文件夹也会有
实验2,停止容器,在ceshi文件夹中编写文件内容,容器内home文件夹也会有
3、数据卷好处:修改配置只需要在服务器上修改,容器会自动同步
(二)、使用dockerfile文件挂载
一、自己构建一个镜像
1、创建一个dockerfile文件,名字可以随机,建议Dockerfile-----mkdir创建文件夹
2、vim dockerfile :打开文件编辑,编辑命令如下
FROM centos
VOLUME["volume01","volume02"]
CMD echo"---end---"
CMD /bin/bash
3,构建镜像
docker build -f home/docker-test-volume/dockerfile1 -t kuangshen/centos:01 .
参数解释:-f 生成镜像名字的路径
-t 生成的镜像名,后面的点表示在当前目录生成镜像
通过这种方式,将挂载写到生成镜像的文件里,构建时会自动挂载卷,匿名挂载。如果文件里没有写,才需要通过-v命令挂载
三、实战演练---部署mysql
1、下载镜像mysql
docker pull mysql:5.7
2、运行时做数据挂载
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql101 mysql:5.7
参数解释:-d----后台运行
-p------端口映射
-v ------数据卷
-e-------配置环境
--name---------命名
四、具名挂载和匿名挂载
匿名挂载:-v 容器内路。只写容器内路径,不写容器外路径,叫匿名挂载
具名挂载:-v 卷名:容器路径-----只写容器外名字,不写路径,写容器路径,叫具名挂载
查看挂载卷的路径
docker volume inspect 卷名
注:所有docker内的卷没有指定目录的情况下,都在/var/lib/docker/volumes/xxxx
容器挂载一般都使用具名挂载
###如何确定是具名挂载还是匿名挂载
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 #具名挂载
-v 主机路径:容器内路径#指定挂载
拓展:
docker run -d -p --name niginx01 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -p --name niginx01 -v juming-nginx:/etc/nginx:rw nginx
ro :readonly #只读,一旦文件打开有ro,说明文件只能通过宿主机操作,容器内部无法操作
rw:readwrite#可读可写