您现在的位置是:首页 >学无止境 >Docker数据管理网站首页学无止境

Docker数据管理

皮卡~~~丘 没电了 2023-06-07 16:00:02
简介Docker数据管理

目录

一、数据管理方式   

1、数据卷

 在宿主机上写入数据,传到容器

2、数据卷容器

二、容器互联


一、数据管理方式   

用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。

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

  • 数据卷(Data Volumes)
  • 数据卷容器(Data Volume Dontainers)

1、数据卷

       数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于 Linux 下对目录进行的 mount 操作。

想要将容器中的数据持久化,可以将宿主机目录挂载到容器中。

一般只建议在创建容器时进行挂载,不建议启动容器后再挂载。因为启动容器后再挂载的话,需要修改配置文件,且不一定能挂载成功。

 docker run -v 数据卷              #在容器内创建数据卷
 ​
 docker run -v 宿主机目录:数据卷    #将宿主机目录挂载到容器中
 #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
 #挂载后的目录默认可读可写
 
 #如果希望挂载后的目录为只读目录,可以在挂载时加:ro参数
 docker run -v 宿主机目录:数据卷:ro    #将宿主机目录挂载到容器中,只可读

[root@localhost ~]# docker run -v /var/share:/data1 --name web1 -itd centos:7 /bin/bash
c80f999588942b3d8a03315a99d5a4e4dc46db47c98989539ae311d04d70b76f
[root@localhost ~]# ls /var/share -d   #自动创建目录
/var/share
[root@localhost ~]# docker exec -it web1 bash  #进入容器
[root@c80f99958894 /]# ls            #容器中自动创建了/data1目录
anaconda-post.log  bin  data1  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c80f99958894 /]# echo "this is nice" > /data1/1.txt  #向数据卷写入数据
[root@c80f99958894 /]# exit
exit
[root@localhost ~]# cd /var/share
[root@localhost share]# ls
1.txt
[root@localhost share]# cat 1.txt      #看到写入的数据,数据同步成功
this is nice

 在宿主机上写入数据,传到容器

[root@localhost share]# cp /etc/shadow ./
[root@localhost share]# ls
1.txt  shadow
[root@localhost share]# docker exec -it web1 /bin/bash
[root@c80f99958894 /]# ls /data1
1.txt  shadow

2、数据卷容器

       如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

[root@localhost share]# docker run --name web2 -v /data1 -v /data2 -itd centos:7  #创建数据卷容器,并创建两个数据卷
b3fa80b6ce6d7d4de4cf7cd2675a0ac4a732297a9541f378784bb460ecca8aba
[root@localhost share]# docker exec -it web2 /bin/bash
[root@b3fa80b6ce6d /]# echo "666" > /data1/a.txt   #导入数据
[root@b3fa80b6ce6d /]# echo "888" > /data2/b.txt
[root@b3fa80b6ce6d /]# exit
exit
[root@localhost share]# docker run -itd --volumes-from web2 --name web3 centos:7   #使用--volumes-from 来挂载web2容器中的数据卷到新的容器web3
f93c8bc2e4ca281666740e495b962d4539df6e5ddc1e34b16269768b00458b0f
[root@localhost share]# docker exec -it web3 /bin/bash
[root@f93c8bc2e4ca /]# cat /data1/a.txt   #查看数据是否一致
666
[root@f93c8bc2e4ca /]# cat /data2/b.txt
888

 在web3的挂载目录写入数据,观察web2能否同步

[root@f93c8bc2e4ca /]# echo "3" > /data1/c.txt
[root@f93c8bc2e4ca /]# exit
[root@localhost share]# docker exec -it web2 /bin/bash
[root@b3fa80b6ce6d /]# cat /data1/c.txt 

二、容器互联

       容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之问建立一条隧道,接收容器可以看到源容器指定的信息。

[root@localhost share]# docker run -itd -P --name b1 centos:7 /bin/bash
[root@localhost share]# docker run -itd -P --name b2 --link b1:b2 centos:7 /bin/bash
[root@localhost share]# docker exec -it b2 /bin/bash
[root@ccdf8d887868 /]# ping b1
PING b2 (172.17.0.2) 56(84) bytes of data.
64 bytes from b2 (172.17.0.2): icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from b2 (172.17.0.2): icmp_seq=2 ttl=64 time=0.076 ms

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。