- 卷就是目录或者文件,存在一个或者多个容器中
- 由docker挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System
- 提供一些用于持续存储或共享数据的特性:
- 卷的设计目的就是数据的持久化,完全独立与容器的生命周期
- 因此Docker不会在容器删除时删除其挂载的数据卷。
特点: 1. 数据卷可以在容器之间共享和重用数据。 2. 卷的更改可以直接生效。 3. 数据卷的更改不会包含在镜像的更新中。 4. 数据卷的生命周期一直持续到没有容器使用它为止。 容器的持久化 容器间继承+共享数据
Docker容器数据卷—渣渣进化论
2、使用数据卷 1、容器中直接使用命令来添加案例一:将 容器内的/home目录 挂载到 宿主机的/home/ceshi目录
1、此时宿主机 /home目录下没有ceshi文件夹
2、查看 镜像列表
3、运行 centos镜像,并将 容器内的/home目录 挂载到 宿主机的/home/ceshi目录
-it 以交互方式进入容器 -v 宿主机绝对路径目录:容器内目录(匿名挂载) 刚看了宿主机home目录下,没有ceshi文件夹,执行这条命令后,会自动在home目录下 创建 ceshi文件夹 docker run -it -v /home/ceshi:/home centos /bin/bash
4、查看数据卷是否挂载成功 docker inspect 容器id
docker inspect 6f6e090441f3
5、进入容器内
docker exec -it 6f6e090441f3 /bin/bash
6、查看容器内 home 目录,此时目录下什么都没有
7、在容器home 目录下,创建 1.txt文件
8、回到 宿主机的 /home/ceshi目录下,查看是否存在了 1.txt文件
案例二:测试容器停止退出后,主机修改数据是否会同步!
1、停止 centos容器运行
2、在宿主机的/home/ceshi目录下,新建 2.txt文件
3、启动刚才停止的centos容器,后查看对应的文件
案例三:删除容器,宿主机的/home/ceshi目录下的数据是否还存在
1、删除正在运行的centos容器
docker rm -f 6f6e090441f3
2、使用 docker 安装 mysql2、数据没有消失
1、搜索 mysql镜像
docker search mysql
2、拉取mysql镜像
docker pull mysql:5.7
3、启动容器
-d 后台运行 -p 宿主机3310端口 映射到 容器3306端口 -v 宿主机mysql配置文件存放目录 挂载到 容器内mysql配置文件目录 -v 宿主机mysql数据存放目录 挂载到 容器内mysql数据存放目录 -e 配置mysql登录时的密码 --name 给开启的容器取个名字 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 mysql001 mysql:5.7
-- 查看容器信息 docker inspect 3f80dfedda46
4、本地客户端测试
5、查看本地的 /home/mysql 目录
6、本地客户端,新建数据库测试
7、删除容器,查看数据是否还存在宿主机的挂载目录中
docker rm -f 3f80dfedda463、通过Docker File 来添加(了解)
1、我们在宿主机 /home 目录下新建一个 docker-test-volume文件夹
2、在docker-test-volume目录下,新建dockerfile1文件
FROM centos VOLUME ["/dataVolumeContainer1", "/dataVolumeConatainer2"] CMD echo "---------end------------" CMD /bin/bash
3、build后生成镜像,获得一个新镜像 hou-centos-001
-f 生成镜像的文件 -t 镜像的名称 . 在当前目录下 docker build -f /home/docker-test-volume/dockerfile1 -t hou-centos-001 .
4、启动容器
docker run -it 6ada91f8da7f /bin/bash
5、我们在数据卷中新建一个 test.txt文件
3、匿名和具名挂载 1、匿名挂载6、查看下这个容器的信息,找到在宿主机中对应的目录位置
# 匿名挂载 -v 容器内路径 docker run -d -P --name nginx01 -v /etc/nginx nginx
案例一
-- 匿名挂载 -v 只写容器内的需要挂载的路径 docker run -d -p 80:80 -v /etc/nginx nginx --name nginx-001
通过 容器信息中的mounts节点,切换到宿主机对应的目录
-- 查看挂载信息列表 docker volume ls2、具名挂载
# 具名挂载 -v 卷名:/容器内路径 docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
案例一
-v 自定义名称:容器内需要挂载的目录 docker run -d -p 80:80 -v nginxcofig:/etc/nginx nginx --name nginx-002
docker volume ls
-- 查看 具名挂载信息 docker volume inspect nginxcofig
其他写法
# 改变文件的读写权限 # ro: readonly # rw: readwrite # 指定容器对我们挂载出来的内容的读写权限 docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx3、路径挂载
-v 宿主机中具体的目录:容器中需要挂载的目录 docker run -d -p 80:80 -v /home/nginxconfig:/etc/nginx nginx --name nginx-003
但是里面什么都没有(dog头)4、数据卷容器 1、容器间传递共享
1、先启动一个父容器centos001,在dataVolumeContainer1新增文件
-- 启动容器centos001 docker run -it --name centos001 6ada91f8da7f /bin/bash
2、创建子容器centos002、centos003,让子容器继承父容器 --volumes-from
-- 启动容器centos002,并继承(--volumes-from centos001)centos001 --volumes-from 容器的NAMES 镜像名称 docker run -it --name centos002 --volumes-from centos001 hou-centos-001 /bin/bash
-- 启动容器centos003,并继承(--volumes-from centos001)centos001 --volumes-from 容器的NAMES 镜像名称 docker run -it --name centos003 --volumes-from centos001 hou-centos-001 /bin/bash
3、删除docker01,docker02 修改后docker03还能不能访问
docker rm -f 663cb03b6f84
容器2和容器3中的数据,依旧还在
4、删除容器2 ,看容器三还能不能访问
5、启动容器4,继承容器3,然后再删除容器3
docker run -it --name centos004 --volumes-from centos003 hou-centos-001 /bin/bash
再删除容器3后,查看容器4中的文件
得出结论: 容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。 存储在本机的文件则会一直保留!
这是跟着大佬学习做的笔记,大家也可以去看看哈
【狂神说Java】Docker最新超详细版教程通俗易懂
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)