学习docker第五弹------Docker容器数据卷
目录
- 1 引入
- 2 Docker容器数据卷是什么
- 3 能干嘛
- 4 案例
- 4.1 宿主 vs 容器 之间映射添加容器卷
- 查看思路
- 4.2 读写规则映射添加说明
- 4.2.1 读写(默认)
- 4.2.2 只读
- 4.3 卷的继承和共享
- 4.3.1 容器1 完成和宿主机的映射
- 4.3.2 容器2 继承容器1 的卷规则
- 5 后记
1 引入
我们之前挂载数据卷的时候可能会遇到cannot open directory .: Permission denied
的错误,解决方案:在挂载目录后多加一个--privileged=true
参数,这个参数扩大容器的权限,解决挂载目录没有权限的问题。
回顾一下之前我们所使用过的命令,参数v
docker run -d -p 5000:5000 -v /sunshine/myregistry/:/tmp/registry --privileged=true registry
2 Docker容器数据卷是什么
类似 Redis 里面的 RDB 和 AOF 文件。
持久化是Redis的一个重要的特性,Redis 提供了两种主要的持久化方式:
- AOF(Append Only File): Redis 的默认方式,通过将 Redis 服务器执行的写命令追加到文件末尾来记录数据的变化情况。Redis 重新启动时,它会读取AOF文件中的命令,并通过执行这些命令来恢复数据。
- RDB(Redis DataBase):它通过将 Redis 数据库的内存快照保存到硬盘上的一个二进制文件中,实现数据的持久化。
数据卷就是将 docker 容器内的数据保存进宿主机的磁盘
中。
要运行一个带有容器卷存储功能的容器实例
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
3 能干嘛
将运用与运行的环境打包镜像,run 后形成容器实例运行,但是我们希望数据是持久化
的。
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能够保存数据在docker中,我们使用卷。
特点:
(1)数据卷可以在容器之间共享或重用数据
(2)卷中的更改可以直接实时生效
(3)数据卷中的更改不会包含在镜像的更新中
(4)数据卷的生命周期一直持续到没有容器使用它为止
4 案例
4.1 宿主 vs 容器 之间映射添加容器卷
docker run -it --name u2 --privileged=true -v /tmp/myHostData:/tmp/myDockerData vim_ifubuntu:1.4 /bin/bash
查看容器卷是否挂载成功
宿主机上:
cd /tmp/myHostData/
docker ps
docker inspect 821c4ba21903
查看思路
(1)docker修改,主机同步获得
在Docker容器上:
cd /tmp/myDockerData/
ll
echo 'docker update 123' > a.log
ll
cat a.log
在宿主机上:
ll
(2)主机修改,docker同步获得
在宿主机上:
echo 'host write 456' >> a.log
cat a.log
在Docker容器上:
cat a.log
(3)docker容器stop,主机修改,docker容器重启查看数据是否同步
在Docker容器上:
exit
在宿主机上:
echo 'docker already exit' > b.log
cat b.log
在Docker容器上:
docker start 821c4ba21903
docker exec -it u2 /bin/bash
cd /tmp/myDockerData/
cat b.log
4.2 读写规则映射添加说明
4.2.1 读写(默认)
rw = read + write
docker run -it --privileged=true -v /mydocker/u:/tmp:rw vim_ifubuntu:1.4
cd /tmp
ll
在宿主机上:
cd /mydocker/u
ll
4.2.2 只读
容器实例内部被限制,只能读取不能写
ro = read only
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker run -it --privileged=true -v /mydocker/u:/tmp:ro vim_ifubuntu:1.4
cd /tmp
ls
touch c.txt
4.3 卷的继承和共享
4.3.1 容器1 完成和宿主机的映射
docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
ll
touch u1_data.txt
在宿主机上:
cd /mydocker/u
ll
4.3.2 容器2 继承容器1 的卷规则
docker run -it --privileged=true --volumes-from u1 --name u3 ubuntu
5 后记
丫的,谁捡了我的快递,吃方便面没有调料包!
BB,专家说要保持开心的心态,不管好不好,都要说好,我现在想个办法说它好,捡走了好,这样我就少拆一个快递。
注意这篇文章非常需要考虑运行的命令在宿主机上,还是容器上,大家可以看图片区分一下,记得给我点赞赞~ 如果有用的话!