Docker容器数据卷
容器数据卷
-
什么是容器数据卷:
docker可以将应用程序连同环境一起打包成镜像容器运行,但容器是互相隔离,一旦容器被删除,容器内的数据便都会丢失,无法持久化保留。为了解决该问题,容器数据卷便诞生了,它可以实现资源共享,将某个文件目录挂在到宿主机上,实现数据的同步,同时也支持容器和容器间的数据共享。 -
使用数据卷:
-
方式一:
# 将容器目录地址挂在到宿主机上
docker run -it -v 宿主机目录地址:容器目录地址 centos /bin/bash练习1:
-
docker run -it -v C:\Users\Administrator\Desktop\mounts:/opt centos /bin/bash
![]()
-
此时,容器的opt目录已经挂载到了宿主机c盘桌面的mounts文件夹上(如果没有mounts文件夹,执行完命令后会自动创建)
-
此时,宿主机mounts和容器opt是资源共享,双向绑定的关系,mounts有的opt会有,opt有的mounts也会有。可以在opt添加一个文件,或在mounts添加一个文件进行测试
-
在opt创建一个hello.java,会自动同步到mounts中
-
在mounts中查看
![]()
-
补充:只要容器存在(不运行的情况下),资源发生了变化也会自动同步!之后如果不想在容器内部修改,通过数据源资源共享,便可实现例如直接在本地修改容器配置文件等操作。
练习2:实现mysql数据持久化
-
docker pull mysql:5.7
-
docker run -d -p 3310:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -v D:\docker_mysql\conf.d:/etc/mysql/conf.d -v D:\docker_mysql\data:/etc/mysql/data mysql:5.7
# -d 后台运行;-p 端口映射;--name 给容器命名;-e 环境参数配置;-v 数据卷挂载![]()
-
在宿主机上测试连接容器mysql
![]()
-
连接后可以建库等操作,会发现挂载的目录会数据自动同步,即使最后把mysql容器删掉,宿主机上的数据仍然存在,实现数据持久保留。
-
-
具名和匿名挂载
1. -v 容器路径 # 匿名挂载:不写前面的宿主机路径,只写容器路径
docker run -d --name nginx01 -v /etc/nginx nginx
2. -v 卷名:容器路径 # 具名挂载:将宿主机路径改成一个卷名:容器路径
docker run -d --name nginx02 -v my_nginx_volume:/etc/nginx nginx
3. docker volume ls # 查看数据卷
DRIVER VOLUME NAME
local 9bdc86392992977a2672bcc8cb17cb480f2ece9d6487d4da901581f00964637e # 匿名(docker会自动生成一个卷名)
local my_nginx_volume # 具名(自已定义的卷名)
4. docker volume inspect 卷名 # 查看指定卷名的信息
docker volume inspect my_nginx_volume
# 通常会使用具名挂载,而不会使用匿名挂载

# 扩展
docker run -d -v my_nginx_volume:/etc/nginx:ro nginx # ro :readOnly 只读
docker run -d -v my_nginx_volume:/etc/nginx:rw nginx # rw :readWrite 读写(默认)
# 一旦设置了ro,便说明这个路径只能通过宿主机来操作,容器内部是无法操作的
DockerFIle(后面会详细说DockerFile,这里只是简单使用dockerfile进行数据卷挂载演示)
什么是DockerFile:DockerFile就是通过编写命令脚本,构建镜像的!
pull 镜像的时候,我们可以发现是一层一层拉取的,而构建镜像的脚本命令,也是一层一层的。
# 1. 在宿主机上创建dockerfile文件,编写命令脚本。命令都是大写(运行时将#注释删除掉)
FORM centos # 首先镜像需要跑在一个服务器上,所有这里使用centos作为基础
VOLUME ["volume01","volume02"] # 挂载文件(匿名挂载)
CMD echo "---end---" # CMD 以命令行的方式运行
CMD /bin/bash # 默认进入到bash控制台
# 2.构建镜像
-f # dockerfile文件路径
-t # 镜像名称
# docker build -f dockerfile文件路径 -t 镜像名称 打包路径
docker build -f D:\docker-file\docklefile01 -t my-first-image-centos D:\docker-file
# build 完成后,执行 docker images 便会看到我们自己构建的 my-first-image-centos 镜像



#既然有挂载,说明容器内和宿主机是资源共享的,通过inspect查看容器元数据,查看卷挂载的路径。
#在实际使用docker中,挂载大多都会在dockerfile中进行挂载,否则便需要-v手动挂载。






浙公网安备 33010602011771号