05 容器数据卷

容器数据卷

什么是容器数据卷

docker的理念回顾

将应用和环境打包成一个镜像

如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化

容器之间可以有一个数据共享的技术

Docker容器中产生的数据,同步到本地!

这就是卷技术,将我们容器内的目录,挂载到Linux上面!

容器的持久化和同步操作,容器间也是可以数据共享的

使用数据卷

方式一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器内目录

[root@vdevops home]# docker run -it -v /home/ceshi:/home centos /bin/bash

# 启动后 我们可以通过 docker insepect 容器id

![1640063984801](E:\桌面\java 图片\typora\1640063984801.png)

测试文件的同步

再次测试

1、停止容器

2、宿主机上修改文件

3、启动容器

4、容器内的数据依旧是同步的

好处:以后修改只需要在本地修改即可,容器内会自动同步

实战:安装MySQL

思考:MySQL的数据持久化

# 获取镜像
[root@vdevops home]# docker pull mysql:5.7

#运行镜像,需要做数据挂载  安装启动 mysql 需要配置密码   -e 设置密码
##官方测试 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

#启动mysql
 -d  后台运行
 -p  端口映射
 -v  卷挂载
-e  环境配置
[root@vdevops home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf..d -v /home/mysql/data:/vat/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

#启动成功之后 使用 sqlyog 测试
# sqlyog 连接到服务器的3310 --- 3306 和容器内的3306 映射  这个时候我们就可以连接上了

#在本地测试创建一个数据库,查看一下我们映射的路径是否ok

将容器删除后,发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能

具名和匿名挂载

# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 查看所有的 volume 的情况
[root@vdevops ~]# docker volume ls
local     b86b7d785dae3880beb936e2b5ddf2c87741f950dcba692f2de822918b9968ba

#这里发现,这种就是匿名挂载,我们在 -v 只写了容器内的路径 没有写容器外的路径

#具名挂载
[root@vdevops ~]# docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx
11141334d26e2cc8b5d8bb598ce836c239b00a44b02b7699150c6b995db112c1
[root@vdevops ~]# docker volume ls
DRIVER    VOLUME NAME
local     
local     juming-nginx

#通过 -v 卷名:容器内路径
[root@vdevops ~]# docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2021-12-21T14:16:40+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

所有的docker容器内的卷,没有指定目录的情况下都是在:/var/lib/docker/volume/xxxx/_data

我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下使用:具名

#如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径   #匿名挂载
-v  卷名:容器内路径  #具名挂载
-v	/宿主机路径:容器内路径   #指定路径挂载

拓展

# 通过 -v 容器内路径: ro  rw  改变读写路径
ro	#只读
rw  #只写

#一旦设置了权限  容器对挂载出来的内容就有限定了
[root@vdevops docker]# docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx

[root@vdevops docker]# docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx

#  ro  只要看到ro 说明这个路径只能通过宿主机来操作,容器内无法操作

初识 Dockerfile

Dockerfile 就是用来构建 docker 镜像的构建文件!命令脚本

方式二:

通过这个脚本可以生产镜像 镜像是一层一层的 脚本是一个一个命令 一个命令就是一层

# 创建一个 dockerfile 文件 名字随意
#文件中的内容  指令(大写)  参数
FROM centos

VOLUME {"volume01","volume-2"}

CMD echo "------end----"
CMD /bin/bash

这种方式我们未来使用的十分多 因为我们通常会创建自己的镜像

假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内部路径

数据卷容器

多个 mysql 同步数据



测试 可以删除docker01 查看一下docker02和docker03是否可以访问这个文件

测试依旧可以访问


容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止

但是一旦你持久到了本地,这个时候,本地的数据就不会删除

posted @   flypiggg  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示