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 命令来指定同时删除关联的容器。

猜你喜欢

转载自www.cnblogs.com/topass123/p/12567058.html