CentOS7-Docker容器数据卷

CentOS7-Docker容器数据卷,第1张

CentOS7-Docker容器数据卷 CentOS7-Docker容器数据卷 1、什么是容器数据卷
  • 卷就是目录或者文件,存在一个或者多个容器中
  • 由docker挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System
  • 提供一些用于持续存储或共享数据的特性:
  • 卷的设计目的就是数据的持久化,完全独立与容器的生命周期
  • 因此Docker不会在容器删除时删除其挂载的数据卷。
特点:
1. 数据卷可以在容器之间共享和重用数据。
2.  卷的更改可以直接生效。
3. 数据卷的更改不会包含在镜像的更新中。
4. 数据卷的生命周期一直持续到没有容器使用它为止。
容器的持久化
容器间继承+共享数据

Docker容器数据卷—渣渣进化论

2、使用数据卷 1、容器中直接使用命令来添加 指令作用docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名将容器内的目录挂载到宿主机指定目录

案例一:将 容器内的/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、数据没有消失

2、使用 docker 安装 mysql

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 3f80dfedda46

3、通过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文件

6、查看下这个容器的信息,找到在宿主机中对应的目录位置

3、匿名和具名挂载 1、匿名挂载
# 匿名挂载
-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 ls

2、具名挂载
# 具名挂载
-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 nginx
3、路径挂载
-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最新超详细版教程通俗易懂

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存