Docker数据管理,防止删库跑路?-阿里云开发者社区

开发者社区> 李白你好> 正文

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

简介: 1.容器退出后会处于终止 (exited)状态,此时可以通过docker ps -a查看,其中数据不会丢失,还可以通过docker start来启动,只有删除容器才会清除数据。 2.容器有一个专门的读写层,会保存操作的记录。就算是docker commit保存的镜像也没有真正修改文件系统。 3.为了保证容器删除后信息一定能够保存(特别是对于数据库的容器),方便后续恢复,我们可以将容器内的数据信息拷贝到宿主机上保存一份。
+关注继续查看

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

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

📢未来很长,值得我们全力奔赴更美好的生活✨

📢往期精彩

👉Docker简介

👉Docker架构

👉Docker命令

1️⃣数据管理的目的

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

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

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

2️⃣数据卷

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

image.png

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

image.png

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

image.png

4.相关命令:

  • docker volume ls:查看宿主机上容器所有数据卷挂载出来的信息。
    image.png
  • docker volume rm xxxx(数据卷名称):删除指定的数据卷挂载信息。
  • docker volume inspect xxxx(数据卷名称):查看卷的信息信息。

image.png

3️⃣匿名挂载

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

image.png

命令:

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。

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

image.png

命令:

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:给出映射的绝对路径。

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

image.png

命令:

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️⃣权限控制

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

image.png

命令:

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

6️⃣同步卷

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

image.png

方法一:

原理:在容器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导致数据丢失。


image.pngimage.pngimage.pngimage.pngimage.pngimage.png


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
docker中安装数据库常见的问题
docker中安装数据库常见的问题 Mysql怎么改密码 MySQL修改root密码的多种方法 在 Navicat for MySQL 下面直接执行 SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘newpass’); 就可以 方法1: 用SET .
1270 0
Docker实战(九)之数据库应用
目前,主流数据库包括关系型和非关系型两种。 关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念金额方法来处理数据库中的数据,支持复杂的事务处理和结构化查询。代表实现有MySQL 、Oracle、PostGreSQL、MariaDB、SQLServer等。
1159 0
mysql 插入数据失败防止自增长主键增长的方法
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次A
1766 0
Kubernetes(一) - Docker管理工具
虽然Docker已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理,资源调度文件管理等等,那么在这样一个百花齐放的容器时代涌现出了很多解决方案,比如Swarm,Mesos,Kubernetes等等,其中谷歌开源的Kubernetes是作为老大哥的存在,从本节开始将介绍如何打造自己的Kubernetes,并且了解它各个组件的用途
135 0
+关注
李白你好
李白,华为云享专家、华为HCIE-R&amp;S专家、CSDN网络领域优质创作者、掘金创作者、BOSS有了黄金创作者、DedSec团队负责人。目前就职于某安全大厂网络攻防实验室,致力于网络、安全领域。全网粉丝2万+
113
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载