记录 Docker 的学习过程 (数据挂载)

docker 存储篇

容器中的存储是分层的,

在容器中,如果我们要创建一个文件,会在文件的最上层(可写层)创建

容器中内置的文件,默认来讲是只读的,只有自己创建的文件才是可写状态

比如说 /etc/passwd 文件,这个文件在容器的最上层(可写层)是不存在的(并不是用户创建,而是镜像中自带的),所以在读取文件时会一层一层向下读入,当发现一个文件后,会将这个文件读取到可写层供用户操作

修改操作和读操作一样,都是一层一层的读取,最后复制到可写层供用户操作

删除则会从上向下操作,先在可写层删除,然后再容器中做个标记,标记文件已经删除了,不需要再向下层去寻找

所以容器镜像会很小,因为只保存用户修改的数据,默认的都是从系统里读取


无论数据卷还是数据卷容器,存在的目的都是为了让容器数据持久化的,不会因为容器的消失,导致数据丢失,就是一个供容器读写的特殊目录


数据卷

node1 # docker run -it --rm -v /opt/data centos bash #使用-v挂载一个目录
[root@84629e87173e /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 76G 5.5G 71G 8% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3 xfs 76G 5.5G 71G 8% /opt/data
tmpfs tmpfs 991M 0 991M 0% /proc/asound
tmpfs tmpfs 991M 0 991M 0% /proc/acpi
tmpfs tmpfs 991M 0 991M 0% /proc/scsi
tmpfs tmpfs 991M 0 991M 0% /sys/firmware

node1 # docker run -it --rm -v /opt/data:/opt centos bash #使用-v 加上冒号 隐藏实际挂载目录

[root@92f517b5273b /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 76G 5.5G 71G 8% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3 xfs 76G 5.5G 71G 8% /opt
tmpfs tmpfs 991M 0 991M 0% /proc/asound
tmpfs tmpfs 991M 0 991M 0% /proc/acpi
tmpfs tmpfs 991M 0 991M 0% /proc/scsi
tmpfs tmpfs 991M 0 991M 0% /sys/firmware


如果在容器内部创建用户,则推荐使用-u 指定uid从后向前的方式创建,以免造成文件权限混淆


[root@92f517b5273b /]#useradd -u 9999 newuser

多个容器可以共用一个宿主机目录挂载,这样可以实现文件共享

数据卷容器

node1 # docker run -it -v /opt/data --name mydata centos bash #先创建一个容器挂在宿主机的/opt/data目录

再打开一个会话 继续新建一个容器

node1# docker run -it --volumes-from mydata --name computer1 centos #--volumes-from mydata 指定从哪里容器挂载卷
[root@d0011a1631c9 /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 76G 5.5G 71G 8% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3 xfs 76G 5.5G 71G 8% /opt/data
tmpfs tmpfs 991M 0 991M 0% /proc/asound
tmpfs tmpfs 991M 0 991M 0% /proc/acpi
tmpfs tmpfs 991M 0 991M 0% /proc/scsi
tmpfs tmpfs 991M 0 991M 0% /sys/firmware

[root@d0011a1631c9 /]# ls /opt/data/ #可以查看到mydata创建的file1文件
file1

此时将mydata容器关闭

[root@c5a09e5d8e87 data]# exit

这个时候在computer1容器上再次ls 是否还可以看到 file1 呢

[root@d0011a1631c9 /]# ls /opt/data/
file1
答案是可以的,如果将mydata容器直接删除,仍然可以查看到file1

上面的这些通过挂载生成的容器在删除时要使用-v参数 即 docker rm -v 容器id
否则会产生垃圾文件
docker volume ls #查看docker volume 信息

docker volume --prune #删除不再使用volume信息 慎用

猜你喜欢

转载自www.cnblogs.com/ruiruiblog/p/12366914.html