docker volume size控制数据卷大小

思念灬终结 2017-09-08 10:53:10
一、【现象】
最新在学习docker,在学习到数据卷的时候发现docker API提供了(dcoker volume create)命令,而且还可以设置数据卷大小,所以就尝试创建了数据卷、限制了数据卷大小并挂载到容器上,在测试阶段发现无论给宿主机中的数据卷目录下写数据还是给容器写数据,数据卷大小都没有受到限制。

二、【疑问】
1.实际数据卷大小并没有收到限制,是我的数据卷命令创建的有问题,还是我的测试步骤或者形式有问题呢?
2.设置了数据卷的大小,预期的效果是什么样?超出限制大小系统会给出错误提示,还是数据仍会写进去,但之前的数据有丢失?

三、【操作步骤】
1.创建数据卷限制大小为3M,启动容器并挂载该数据卷
2.通过命令的形式给宿主机中的数据卷写了一个3M的文件(文件名:3M.file),并查看文件大小
3.进入到容器查看/data目录下文件大小,发现也生成3M.file文件,而且文件的大小跟宿主机一样为3.0M




PS:路过的大神麻烦指条明路,问题到底出现在哪里,怎样才能控制住数据卷的大小呢,在线等~~~
如果有docker相关的微信群麻烦也提供下,我进去咨询咨询,再次谢过~~~
...全文
1404 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码誊写工 2017-09-09
  • 打赏
  • 举报
回复
如果帮到你,请务必结贴
代码誊写工 2017-09-09
  • 打赏
  • 举报
回复
docker volume管理自己的一套volume 然后通过 docker run -v <volume_container_name>:<mount_point> 给一个容器使用,例如:
[root@host ~]# docker volume create -d local -o type=tmpfs -o device=tmpfs -o o=size=2m,uid=1000 --name my_test_volume_01
[root@host ~]# docker volume inspect my_test_volume_01
[
    {
        "Name": "my_test_volume_01", #这个才是你在-v里的参数
        "Driver": "local",
        "Mountpoint": "/opt/docker/graph/volumes/my_test_volume_01/_data", #这个是实际数据存储,你可以在宿主机里直接读取z容器里这个volume的数据,但不是你在-v里的参数
        "Labels": {},
        "Scope": "local"
    }
]


[root@host ~]# docker run -it --rm --name test01 --hostname test01 -v my_test_volume_01:/mytest centos:7.3.1611 bash
[root@test01 /]# cd /mytest
# 尝试往里面填充数据,但最后只能写入2M。
[root@test01 /]# dd if=/dev/zero of=/mytest/my01.img bs=1M count=10 
不用docker vloume实现类似这样:
[root@host ~]# mkdir /run/my_test_volume_01
[root@host ~]# mount tmpfs /run/my_test_volume_01 -t tmpfs -o rw,size=2m,uid=1000
# 再把这个文件系统用-v挂载给容器
[root@host ~]# docker run -it --rm --name test01 --hostname test01 -v /run/my_test_volume_01:/mytest centos:7.3.1611 bash
如果你在宿主机创建一个img文件,就有另外两种方式给容器使用。
[root@host ~]# dd if=/dev/zero of=/tmp/myfs.img bs=1 count=0 seek=2M

方式1.在宿主机mount img文件到一个目录,再通过-v把该目录挂载给容器
# 格式化img文件
[root@host ~]# mkfs.ext4 /tmp/myfs.img #空间只剩900K可用
# 把img文件mout到宿主机的一个目录
[root@host ~]# mount /tmp/myfs.img /run/mytest -o loop -t ext4
# 再把这个目录挂载给容器
[root@host ~]# docker run -it --rm --name test01 --hostname test01 -v /run/my_test_volume_01:/mytest centos:7.3.1611 bash

方式2.把img文件创建为loop device,通过--device让容器直接管理块设备
# 格式化img文件
[root@host ~]# mkfs.ext4 /tmp/myfs.img #空间只剩900K可用
# 把img文件通过losetup做成宿主机的一个loop块设备
[root@host ~]# losetup -v /dev/loop0 /tmp/myfs.img
# 打开容器的sys_admin权限(没有这个权限无法mount),并通过--device=/dev/loop0,把loop块设备给容器使用
[root@host ~]# docker run -it --rm --cap-add=sys_admin --name tes01 --hostname test01 --device=/dev/loop0 my/centos:7.3.1611 bash
[root@test01 /]# mkdir /mytest
[root@test01 /]# mount /dev/loop0 /mytest/
[root@test01 /]# cd /mytest
[root@test01 mytest]# df -lh
Filesystem                Size  Used Avail Use% Mounted on
overlay                    16G  4.2G   12G  27% /
tmpfs                     5.9G     0  5.9G   0% /dev
tmpfs                     5.9G     0  5.9G   0% /sys/fs/cgroup
/dev/mapper/vg_root-root   16G  4.2G   12G  27% /etc/hosts
shm                        64M     0   64M   0% /dev/shm
/dev/loop0                987K  947K     0 100% /mytest
rayw0ng 2017-09-08
  • 打赏
  • 举报
回复
换个挂载姿势试试
-v yh-test-volume:/data

18,829

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧