????身为新时代的网络工程师,传统的路由交换已经满足不了日常。SDN、网络自动化、虚拟化、容器化的出现已经慢慢的代替了传统的数据通信。NetDevOps更是要求现代的网络工程师让编程和自动化成为日常的口袋技能。这个趋势下,我们不得不让自己有闪光点,不然迟早会被淘汰!

???? ????欢迎点赞 ???? 收藏 ???? 如有错误敬请指正!
????未来很长,值得我们全力奔赴更美好的生活✨


1️⃣数据管理的目的

1.容器退出后会处于终止 (exited)状态,此时可以通过​​docker ps -a​​查看,其中数据不会丢失,还可以通过docker start来启动,只有删除容器才会清除数据。

2.容器有一个专门的读写层,会保存操作的记录。就算是​​docker commit​​保存的镜像也没有真正修改文件系统。

3.为了保证容器删除后信息一定能够保存(特别是对于数据库的容器),方便后续恢复,我们可以将容器内的数据信息拷贝到宿主机上保存一份。

2️⃣数据卷

1.容器存放数据的目录,也就是数据卷,一般在Dockerfile中有所定义(不是所有的都定义了)。以PSQL为例子,在Dockerfile中可以看到,所以在我们使用此镜像生成容器的时候,不用再手动指定。

Docker数据管理,防止删库跑路?_数据

2.使用inspect查看psql的容器,可以看到如下信息。其中设置的容器内的目录的内容被映射到了宿主机上随机产生的目录上。

Docker数据管理,防止删库跑路?_数据_02

3.进入容器向宿主机映射的目录,可以看到如下容器内映射出来数据信息:

Docker数据管理,防止删库跑路?_docker_03

4.相关命令:



​docker volume ls​​:查看宿主机上容器所有数据卷挂载出来的信息。
Docker数据管理,防止删库跑路?_docker_04



​docker volume rm xxxx​​(数据卷名称):删除指定的数据卷挂载信息。



​docker volume inspect xxxx​​(数据卷名称):查看卷的信息信息。



Docker数据管理,防止删库跑路?_centos_05

3️⃣匿名挂载

定义:据卷挂载出来路径自动产生,其中名称为随机产生的ID。

Docker数据管理,防止删库跑路?_centos_06

命令:

​docker run -it -v /路径 --name xxx(容器名) yyy(镜像名称)​​。其中 /路径为容器内数据卷的位置。

举例:

​docker run -it -v /Data/prin --name prin/centos centos​​。将容器内数据数据卷​​/Data/prin​​,挂载到宿主机​​/var/lib/docker/volume/<id>/_data​​下。

4️⃣具名挂载

定义:

数据卷挂载出来的名称或者绝对路径由由创建者指定。

情况1:给出容器的名称而代替随机产生的ID。

概述:宿主机映射出来的目录中本来为随机的,现在替换为具体的名称。

Docker数据管理,防止删库跑路?_docker_07

命令:

​docker run -it -v xxx(名称):/路径 --name xxx(容器名) yyy(镜像名称)​​。

举例:

​docker run -it -v prin_centos:/Data/prin --name prin/centos centos​​。将容器内数据数据卷​​/Data/prin​​,挂载到宿主机​​/var/lib/docker/volume/prin_centos/_data​​下。

情况2:给出映射的绝对路径。

概述:将数据卷内的信息挂载到给出的绝对路径下。

Docker数据管理,防止删库跑路?_数据_08

命令:

​docker run -it -v /路径1:/路径2 --name xxx(容器名) yyy(镜像名称)​​。

举例:

​docker run -it -v /Docker_data/centos:/Data/prin --name prin/centos centos​​。将容器内数据数据卷​​/Data/prin​​,挂载到宿主机​​/Docker_data/centos​​下。

5️⃣权限控制

概述:可以设置容器对数据卷为只读(默认是读写),宿主机为读写。

Docker数据管理,防止删库跑路?_数据_09

命令:

​docker run -it -v /Docker_data/Centos(具体路径):/Date/prin:ro(仅读) --name prin/centos(容器名) centos​​。其中容器内为只读目录,宿主机为读写目录。

6️⃣同步卷

概述:将多个容器的数据卷和宿主机的同一个目录进行同步。

Docker数据管理,防止删库跑路?_centos_10

方法一:

原理:在容器run的时候,设置挂载为同一个目录。

容器1:​​docker run -it -v /Docker_data/Centos/:/Data/prin --name prin_centos-1 centos​

容器2:​​docker run -it -v /Docker_data/Centos/:/Data/prin --name prin_centos-2 centos​

方法二:

原理:使用–volume-from同步卷。

命令:

​docker run it --name prin-centos-1 --volumes-from prin-centos centos​​。prin-centos-1容器直接使用prin-centos的数据卷。

7️⃣容器恢复

当容器被删除后,其数据还保存在宿主机挂载的目录下,后续重新通过镜像生成容器的时候,再将数据卷挂载在这个目录下即可。

8️⃣可以这样理解

卷:容器的持久化和同步操作,实现容器间数据共享,通过卷将dockers中的数据同步到本地,容器内将目录自动同步到Linux中——双向绑定。防止删除docker导致数据丢失。


复习举例
Docker数据管理,防止删库跑路?_centos_11
Docker数据管理,防止删库跑路?_数据_12
Docker数据管理,防止删库跑路?_数据_13Docker数据管理,防止删库跑路?_docker_14
Docker数据管理,防止删库跑路?_centos_15
Docker数据管理,防止删库跑路?_数据_16
Docker数据管理,防止删库跑路?_docker_17