Docker数据卷

什么是docker数据卷
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使数据做为镜像的一部分保存下来,那么当容器删除后,数据也就没有了。为了能保存数据我们必须使用数据卷。数据卷就像是给容器外接了一个硬盘,数据保存在硬盘中,即使容器删除数据也不会丢失。

可以做什么
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

实现方式
通过docker 命令 为容器添加数据卷
如下命令 将 容器的dataVolume 目录挂载到 宿主机的mydataVolume 目录。

docker@default:~$ docker run -it -v /mydataVolume:/dataVolume centos      
[root@4ea59084d79b /]# docker ps

检查数据卷是否添加成功:
容器启动后 目录增加 dataVolume 目录 如下:

[root@4ea59084d79b /]# ll
total 56
-rw-r--r--   1 root root 12082 Mar  5  2019 anaconda-post.log
lrwxrwxrwx   1 root root     7 Mar  5  2019 bin -> usr/bin
drwxr-xr-x   2 root root    40 Nov 17 07:55 dataVolume
drwxr-xr-x   5 root root   360 Nov 17 07:55 dev
drwxr-xr-x   1 root root  4096 Nov 17 07:55 etc
drwxr-xr-x   2 root root  4096 Apr 11  2018 home
lrwxrwxrwx   1 root root     7 Mar  5  2019 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Mar  5  2019 lib64 -> usr/lib64
drwxr-xr-x   2 root root  4096 Apr 11  2018 media
drwxr-xr-x   2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x   2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 139 root root     0 Nov 17 07:55 proc
dr-xr-x---   2 root root  4096 Mar  5  2019 root
drwxr-xr-x  11 root root  4096 Mar  5  2019 run
lrwxrwxrwx   1 root root     8 Mar  5  2019 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x  13 root root     0 Nov 17 07:55 sys
drwxrwxrwt   7 root root  4096 Mar  5  2019 tmp
drwxr-xr-x  13 root root  4096 Mar  5  2019 usr
drwxr-xr-x  18 root root  4096 Mar  5  2019 var

容器启动后 宿主机增加 mydataVolume目录 如下:

docker@default:/$ ls -l
total 4
drwxr-xr-x    2 root     root          1420 Nov 17 05:19 bin
drwxr-xr-x    3 root     root            60 Nov 17 05:15 c
drwxrwxr-x   14 root     staff         4360 Nov 17 05:19 dev
drwxr-xr-x    9 root     root          1000 Nov 17 05:15 etc
drwxrwxr-x    4 root     staff           80 Nov 17 05:19 home
-rwxr-xr-x    1 root     root           496 Mar 28  2019 init
drwxr-xr-x    4 root     root           840 Nov 17 05:19 lib
lrwxrwxrwx    1 root     root             3 Nov 17 05:19 lib64 -> lib
lrwxrwxrwx    1 root     root            11 Nov 17 05:19 linuxrc -> bin/busybox
drwxr-xr-x    4 root     root            80 Nov 17 05:19 mnt
drwxr-xr-x    2 root     root            40 Nov 17 07:55 mydataVolume
drwxrwsr-x    3 root     staff          180 Nov 17 05:15 opt
dr-xr-xr-x  137 root     root             0 Nov 17 05:18 proc
drwxrwxr-x    2 root     staff           80 Nov 17 05:19 root
drwxrwxr-x    6 root     staff          120 Nov 17 05:15 run
drwxr-xr-x    2 root     root          1300 Nov 17 05:19 sbin
dr-xr-xr-x   13 root     root             0 Nov 17 05:19 sys
lrwxrwxrwx    1 root     root            13 Nov 17 05:19 tmp -> /mnt/sda1/tmp
drwxr-xr-x    7 root     root           140 Nov 17 05:19 usr
drwxrwxr-x    8 root     staff          180 Nov 17 05:19 var

执行docker inspect 目录查看容器信息 ,可以看到数据卷信息 且读写状态为 true (表示有读写权限)

 "Mounts": [
            {
                "Type": "bind",
                "Source": "/mydataVolume",
                "Destination": "/dataVolume",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

在容器中创建文件 containerfile.txt 并修改内容

[root@4ea59084d79b dataVolume]# touch  containerfile.txt
[root@4ea59084d79b dataVolume]# vi containerfile.txt 
[root@4ea59084d79b dataVolume]# cat continerfile.txt
cat: continerfile.txt: No such file or directory
[root@4ea59084d79b dataVolume]# cat containerfile.txt 

宿主机可以看到文件,添加成功

docker@default:/$ ls mydataVolume/
containerfile.txt
docker@default:/$ 

增加只读数据卷

命令格式: docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名,如下 增加只读数据卷后容器无法在目录中添加文件并修改内容只能读取目录内容

docker@default:/$ docker@default:~$ docker run -it -v /mydataVolume:/dataVolume:ro centos 
-bash: docker@default:~$: command not found
docker@default:/$ docker run -it -v /mydataVolume:/dataVolume:ro centos 
[root@29ab3fe3af4a /]# docker ps
bash: docker: command not found
[root@29ab3fe3af4a /]# docker ps
bash: docker: command not found
[root@29ab3fe3af4a /]# ls
anaconda-post.log  dataVolume  etc   lib    media  opt   root  sbin  sys  usr
bin                dev         home  lib64  mnt    proc  run   srv   tmp  var
[root@29ab3fe3af4a /]# cd dataVolume/
[root@29ab3fe3af4a dataVolume]# touch b.txt
touch: cannot touch 'b.txt': Read-only file system

在dockfile中为镜像增加数据卷
格式;VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
说明:
由于宿主机目录是依赖于特定宿主机的,不能够保证在所有的宿主机上都存在这样的特定目录。出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catch that elf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值