docker之数据管理

1、Docker容器的两个缺点

    沙盒文件系统是跟随Docker容器的,无法持久化存储数据

    Docker容器是和宿主机隔离的,无法共享容器内部的数据

Docker容器文件系统是基于UnionFS,由于UnionFS支持挂载不同类型的文件系统到统一的目录结构中,所以只需要将宿主操作系统中的文件系统里的文件或目录挂载到容器中,便能够让容器内外共享这个文件。UnionFS带来的读写性能损失是可以忽略不计的,所以这种实现可以说是相当优秀的。

2、Docker的挂载方式

    Bind Mount,能够直接将宿主操作系统中的目录和文件挂载到容器内的文件系统中,通过指定容器外的路径和容器内的路径,就可以形成挂载映射关系,在容器内外对文件的读写,都是相互可见的。

    Volume,从宿主操作系统中挂载目录到容器内,只是这个挂载的目录由Docker进行管理,只需要指定容器内的目录,不需要关心具体挂载到了宿主操作系统中的位置。

   Tmpfs Mount,支持挂载系统内存中的一部分到容器的文件系统里,不过由于内存和容器的特征,它的存储并不是持久的,其中的内容会随着容器的停止而消失。

3、挂载文件或目录

root@wxj-virtual-machine:/data/www# docker run -d -p 80:80 -v /data/www:/usr/local/apache2/htdocs httpd:latest

说明:把宿主目录的/data/www挂载到容器的/usr/local/apache2/htdocs目录

挂载宿主操作系统目录的形式是-v <host-path>:<container-path>,其中host-path和container-path分别代表宿主操作系统中的目录和容器中的目录。为了避免混淆,Docker强制定义目录时必须使用绝对路径,不能使用相对路径。

3、挂载数据卷

root@wxj-virtual-machine:/data/www# docker run -d -p 80:80 -v /data/www  httpd:latest
#进入容器查看
root@wxj-virtual-machine:/data/www# docker exec -it 4bad6ef0a029 /bin/bash
root@4bad6ef0a029:/usr/local/apache2/htdocs# df 
Filesystem                  1K-blocks    Used Available Use% Mounted on
overlay                      19519312 6144416  12360320  34% /
tmpfs                           65536       0     65536   0% /dev
tmpfs                          749264       0    749264   0% /sys/fs/cgroup
/dev/mapper/ubuntu--vg-root  19519312 6144416  12360320  34% /data/www
shm                             65536       0     65536   0% /dev/shm
tmpfs                          749264       0    749264   0% /proc/acpi
tmpfs                          749264       0    749264   0% /proc/scsi
tmpfs                          749264       0    749264   0% /sys/firmware

可以看到当前宿主目录的数据卷挂载到容器中了

发表评论

后才能评论