docker 1.4之容器的数据卷

1.什么是数据卷

       容器数据卷是宿主机中一个目录或文件,通过把目录或文件挂载到容器中,可以将主机和容器之前数据同步,一个数据卷目录可以同时挂载多个容器,解决多容器之间文件交换问题,删除容器时不会删除其挂载的数据卷。

2.特点:

(1)数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会被拷贝到新初始化的数据卷中
(2)数据卷可以在容器之间共享和重用
(3)可以对数据卷里的内容直接进行修改
(4)数据卷的变化不会影像镜像的更新
(5)卷会一直存在,即使挂载数据卷的容器已经被删除
3.如何使用
 (1)为容器添加数据卷,使用-v参数
 docker run --name volume2 -v /root/datavolume:/data -it nginx:1.20.2               #宿主机的/datavolume目录下创建的数据就会同步到容器的/data目录,在宿主机的指定目录下或容器指定目录下创建文件或其他都会同步,   
# --name volume2      容器名
#  /root/datavolume    宿主机目录
#  /data                       容器目录
目录必须是绝对路径,如果容器目录中有数据,创建容器挂载会把容器目录里的数据清空

 

 

  (2)为数据卷添加访问权限,使得容器只可以读,不可以修改
[root@elk test1]# docker run --name test2 -v /opt/test2:/opt/test2:ro -itd centos /bin/bash     ro表示只读权限

 (3)一次挂载多个文件到容器中,可多次指定-v的参数,如果改变了容器的配置文件,需要重启容器

[root@elk ~]# docker run -id --name=test2 -p 81:81 -v /var/log/test1:/usr/share/test2  -v /root/nginx/html:/usr/share/nginx  centos:7
5f9c05bb49bcab48b4cb54ad1c7960952b45e102570ffc27a3e2b16d8526220d

4。使用dockerfile构建包含数据卷的镜像

(1)编辑dockerfile文件

[root@elk test]# cat dockerfile 
FROM centos:7
VOLUME ["/datavolume1","/datavolume2"]     #可同时挂载两个容器里的目录
CMD /bin/bash

(2)构建镜像

[root@elk test]# docker build -t volume .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/3 : VOLUME ["/datavolume1","/datavolume2"]
 ---> Running in 791d62e5a3cf
Removing intermediate container 791d62e5a3cf
 ---> 62783498bc10
Step 3/3 : CMD /bin/bash
 ---> Running in ac35665a4d2d
Removing intermediate container ac35665a4d2d
 ---> dcdfa840f7d0
Successfully built dcdfa840f7d0
Successfully tagged volume:latest

(3)查看用dockerfile构建好的镜像

[root@elk test]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
volume       latest    dcdfa840f7d0   6 seconds ago   204MB
<none>       <none>    1e7b57c99e04   4 hours ago     375MB
nginx        v1        0b84f8562dc1   6 hours ago     547MB
<none>       <none>    0ef97cebe6b4   31 hours ago    232MB
<none>       <none>    8f5602dc2b28   11 days ago     232MB
centos       7         eeb6ee3f44bd   8 months ago    204MB
test         centos    eeb6ee3f44bd   8 months ago    204MB
centos       latest    5d0da3dc9764   8 months ago    231MB

(4)创建容器

[root@elk test]# docker run --name volume-doubble  -itd volume /bin/bash
94de44755c87a63923c9ae9d89c723f5448a3868ad688ed03c98968cbb5fa4d0

(5)登录容器查看,是否有dockerfile里俩目录

[root@elk test]# docker exec -it volume-doubble /bin/bash
[root@94de44755c87 /]# ls
anaconda-post.log  datavolume1  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                datavolume2  etc  lib   media  opt  root  sbin  sys  usr

 (6)查看容器的信息

[root@elk ~]# docker inspect volume

  

posted @ 2022-06-07 23:56  多次拒绝黄宗泽  阅读(41)  评论(0编辑  收藏  举报