1、什么是容器数据卷
简单来说就是把Docker容器内的目录挂载到主机对应的目录上,使该两个目录下的数据保持同步
2、使用指定路径挂载数据卷
-
- #选项及解释
- -it表示使用交互方式运行容器,能进入容器内部进行内容的查看
- -v表示使用数据卷
-
- docker run -it -v 主机目录:容器目录 镜像名称:[TAG]
例:
docker run -it -v /home/ken:/home centos:7
3、查看使用数据卷后容器的元数据
docker inspect 容器id
找到Mounts,查看挂载信息,显示成功联通容器指定目录和主机指定目录
进入主机的home目录,发现在主机的home目录下自动生成一个名为ken的目录
4、在容器指定目录里新建任意文件,查看数据挂载效果
例:
(1)容器新建文件,主机自动挂载容器指定目录的数据
容器:
新建名为ken.txt的文件
主机:
查看/home/ken目录下的文件,发现容器的ken.txt文件同步过来到主机
(2)关闭容器,修改主机的文件内容,重启容器,查看文件内容,容器自动挂载主机指定目录的数据,并且在容器关机后进行数据变更,在容器重启后容器仍会自动挂载主机指定目录的数据
主机:
用vim命令修改ken.txt文件的内容
容器:
退出容器,容器自动关机,然后重新启动容器,再回到/home目录下,并查看ken.txt文件的内容,发现容器虽然在主机改变ken.txt文件的内容时关机了,但在重启后仍能自动同步主机的ken.txt文件的内容
其他:
1、匿名挂载数据卷
docker -v 容器内路径
例:
- #选项及解释
- --name="name"参数用于给容器取名字 ,用来区分容器
- -d表示容器在后台运行
- -p表示指定容器的端口,写法为-p主机端口:容器端口
- -v表示使用数据卷
-
- docker run -d -p 3310:3306 --name mysql01 -v /etc/mysql mysql:8.0
2、具名挂载数据卷
docker -v 卷名:容器内路径
例:
- #选项及解释
- --name="name"参数用于给容器取名字 ,用来区分容器
- -d表示容器在后台运行
- -p表示指定容器的端口,写法为-p主机端口:容器端口
- -v表示使用数据卷
- name-mysql就是卷的具体名字
-
- docker run -d -p 3100:3306 --name mysql01 -v name-mysql:/etc/mysql mysql:8.0
3、查看所有的数据卷
docker volume ls
4、查看数据卷的挂载目录
docker volume inspect 卷名
例:
所有docker容器内的数据卷,没指定目录的情况下默认目录都是/var/lib/docker/volumes/卷名/_data
5、改变读写权限(一旦设置了容器权限,容器对挂载出来的内容就有了限定)
只读(只能通过宿主机来操作内容,容器内部无法操作):
- #选项及解释
- --name="name"参数用于给容器取名字 ,用来区分容器
- -d表示容器在后台运行
- -P表示指定容器的端口,写法为-p主机端口:容器端口
- -v表示使用数据卷
- name-mysql就是卷的具体名字
- ro全称readonly,表示只读
-
- docker run -d -p 3100:3306 --name mysql01 -v name-mysql:/etc/mysql:ro mysql:8.0
可读可写:
- #选项及解释
- --name="name"参数用于给容器取名字 ,用来区分容器
- -d表示容器在后台运行
- -P表示指定容器的端口,写法为-p主机端口:容器端口
- -v表示使用数据卷
- name-mysql就是卷的具体名字
- rw全称readwrite,表示可读可写
-
- docker run -d -p 3100:3306 --name mysql01 -v name-mysql:/etc/mysql:rw mysql:8.0
6、使用Dockerfile进行数据卷挂载
(1)创建一个名为dockerfile的Dockerfile文件,内容如下
- #镜像以什么为基础
- FROM centos:7
-
- #挂载数据卷(匿名)
- VOLUME ["volume01","volume02"]
-
- #挂载数据卷(具名)
- #VOLUME [volume01:"volume01",volumeo2:"volume02"]
-
- #输出结束
- CMD echo '=========================END====================='
-
- #走的命令
- CMD /bin/bash
(2)输入以下命令编译出名为myimage的镜像
- #选项及解释
-
- myimage表示镜像名称
- -t表示后面是自定义镜像名
-
-
- docker build -f dockerfile -t myimage .
效果图:
(3)启动生成的镜像并查看目录
(4)查看容器的元数据,可知容器数据卷对应的宿主机目录(由Name是一串随机字符串可看出这生成的两个目录都是匿名数据卷)