• docker-数据管理(3)


     Docker 容器中管理数据主要有两种方式:

    • 数据卷(Data volumes)
    • 数据卷容器(Data volumes containers

    数据卷是一个可供一个或者多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:

    • 数据卷可以在容器之间共享和重用
    • 对数据卷的修改会立马生效
    • 对数据卷的更新,不会影响镜像
    • 数据卷默认会一直存在,即时容器被删除
    [root@server ~]# docker volume create myvolume  #创建一个数据卷
    myvolume
    [root@server ~]# docker volume inspect myvolume  #查看数据卷的信息
    [root@server ~]# docker run -d -it --name myCentos --mount src=myvolume,dst=/data centos  #创建一个myCentos容器,并将myvolume数据卷挂载到myCentos容器的/data目录
    [root@server ~]# docker exec -it myCentos /bin/bash  #进入容器
    [root@8f3094a730af /]# echo “hello” > /data/test.txt   
    #查看文件
    [root@server ~]# cd /var/lib/docker/volumes/myvolume/_data  #在另外一个终端进入到数据目录里面
    [root@server ~]# more test.txt
    View Code
    此时开启另外一个终端再次创建一个容器,并且挂载同样的数据卷,可以发现这种方式可以在容器之间共享和重用
    
    [root@server ~]# docker run -d -it --name myCentos01 --mount src=myvolume,dst=/data centos  #新开一个终端创建新的一个容器,挂载同样的数据卷
    [root@server ~]# docker exec -it myCentos01 /bin/bash
    [root@45c3ca27ddad /]# ls /data/  
    View Code

    使用 -v 参数也可以指定挂载一个本地主机的目录到容器中

    [root@server ~]# docker run -d -ti --name web -v /webapp:/opt/webapp centos  #创建一个名字叫web的容器,并且将宿主机的/webapp目录 挂载到容器的/opt/webapp目录
    [root@server ~]# ls /webapp/  #查看宿主机的目录,如果没有该目录,会自动创建
    [root@server ~]# echo "hello" >> /webapp/index.html  #追加一个文件进去
    [root@server ~]# docker exec -ti web /bin/bash   #进入容器
    [root@16c66fe42017 /]# cat /opt/webapp/index.html   #查看容器/opt/webapp目录下的数据
    View Code

    数据卷容器

    如果有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。数据卷容器其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

    [root@server ~]# docker run -d -v /dbdata --name dbdata centos  #创建一个数据卷容器
    
    [root@server ~]# docker run -d -it --volumes-from dbdata --name db1 centos  #创建一个db1容器, 使用 --volumes-from 来挂载 dbdata 容器中的数据卷
    [root@server ~]# docker exec -it db1  /bin/bash  #进入db1容器中
    [root@1863842f0c16 /]# ls  #查看已成功挂载dbdata数据卷
    anaconda-post.log  dbdata  etc   lib    media  opt   root  sbin  sys  usr
    bin                dev     home  lib64  mnt    proc  run   srv   tmp  var
    [root@1863842f0c16 /]# touch dbdata/file1  #在dbdata目录中创建一个文件
    
    [root@server ~]# docker run -d -it --volumes-from dbdata --name db2 centos  #再创建一个db2容器,使用 --volumes-from 来挂载 dbdata 容器中的数据卷
    [root@server ~]# docker exec -it db2 /bin/bash  #进入db2容器中
    [root@0fca0699a7c7 /]# ls  #查看也成功挂载dbdata数据卷
    anaconda-post.log  dbdata  etc   lib    media  opt   root  sbin  sys  usr
    bin                dev     home  lib64  mnt    proc  run   srv   tmp  var
    [root@0fca0699a7c7 /]# ls dbdata/  #并且还查看到了db1容器创建的file1文件,说明容器之间的数据共享了
    file1
    
    另外还可以级联创建
    [root@server ~]# docker run -d -ti --name db3 --volumes-from db1 centos  #创建一个db3容器,通过 --volumes-from 级联挂载上面的db1容器
    
    级联删除:
    View Code

    注意:如果删除了挂载的容器(包括dbdata、db1和db2),数据卷也不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。

  • 相关阅读:
    生活娱乐 工业机器人代替工人装配鼠标键盘
    生活娱乐 工商银行如何查询开户行
    生活娱乐 格力空气能热水器怎么样
    生活娱乐 岛城将开首家机器人餐厅
    生活娱乐 毕业生论文查重技巧
    Windows 老是弹出要自动拨号连接怎么办
    Office 针式打印机如何调节边距
    Office 如何打印彩色照片能取得较好的效果
    西游释厄传如何设置简化出招表
    [ES2019] Use JavaScript ES2019 flatMap to Map and Filter an Array
  • 原文地址:https://www.cnblogs.com/topass123/p/12567058.html
Copyright © 2020-2023  润新知