什么是容器数据卷技术?
到这里,我算是入门docker了!
docker的理念:将环境和应用打包成一个镜像!直接安装就能使用
如果数据都在容器中,那么我们一旦将容器删除,数据就会丢失!因为你只读层没有更改,相当于就是镜像层没有改变
==需求:数据持久化==
比如你有一容器是MySQL,你一旦删除这个mysql容器,里面数据丢失,那你相当于就是删库跑路,风险很大。==需求:这mysql的数据不要存储在本地!==
容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地!
我把容器删除,但我们的数据不会丢失,其实就是目录的挂载
将我们容器的目录,挂载到我们的虚拟机上或者linux上面
卷就是目录或者文件,存在与一个或中多个容器内,通过docker挂在到容器内,但不属于联合文件系统,提供持续存储或共享数据的特性。
卷的目的就是数据的持续化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其他挂载的数据卷
可以理解为容器内的数据持续的保存到我们宿主机的磁盘中。
容器数据卷技术能干什么?
1.数据卷可以在容器之间共享或重用数据
2.卷中的更改可以直接实时生效
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一直持续到没有容器使用它为止。
相关的命令与参数
--privileged=true,权限扩容的意思,只有这个参数,这个容器内的root才会有root权限
docker run -d -p 8080:8080 -v /zzyyuse/mycentos/:/tem/centos --privileged=true centos7
-v /zzyyuse/mycentos/:/tem/centos --privileged=true(-v 宿主机的绝对路径:容器内的路径,放开权限)
数据卷案例
1.宿主机和容器内之间映射:保证数据同步
命令docker run -d
首先就是查看宿主机上tmp目录文件,可以发现没有
现在通过命令:
docker run -it --privileged=true -v /tmp/centos10:/tmp/centos10docker -
-name centos10 centos
创建这个数据卷成功
回宿主机上查看tmp目录下,发现自动创建了一个centos10目录
首先是宿主机上操作
我写了一个hello docker内容的文件进入这个目录
进入docker容器,发现这个文件也存在。这里并不能说明内容共享,只是单方面。
接着是在容器里面操作
追加一行代码
在宿主机上打印
可以发现hello baby出现在容器内,这里结合上面内容可以说明数据卷的共享性
查看数据卷是否挂在成功,或者说挂载在哪里?
docker inspect 容器ID
现在我停止容器centos10
在宿主机上创建1.txt
启动,进入这个centos10容器
发现也有1.txt文件,这就是挂载。
(2)容器卷的读写规则
我们上面使用的是默认规则,相互可以写
但这里我们可以设置,宿主机只能读,不能写,或者容器内只能读取
命令:docker run -it --privileged=true -v /tmp/centos10:/tmp/centos10docker:ro -
-name centos10 centos
解释:ro = read only的意思
这里有点错误,无伤大雅
我想在容器里面创建hello文件,但是不可以,而在宿主机上面可以创建hello.txt,
(3)容器卷的继承
1)先容器卷的创建
docker run -it --privileged=true -v /tmp/u1host:/tmp/u1docker --name u1 centos
docker容器 u1
宿主机
2)容器u2继承容器u1的容器卷
docker run -it --privileged=true --volumes-from u1 --name u2 centos
这个参数中--volumes其实就是我们-v的完整名字
这里我touch创建了一个udocker的txt文件,看看u1是否也可以看见
这里你可以发现u1其实也是