docker 系列(四):docker 容器数据卷

本文解答了Docker容器数据管理的三大难题,介绍数据卷概念及其在容器数据持久化、外部机器通信及容器间数据交换中的应用。通过实例演示如何配置数据卷,实现数据的安全与高效管理。

声明:作者才疏学浅,如果文章有误,请评论指出。如果有疑问,欢迎关注评论交流。若转载,请注明出处。

一、思考

我们在使用 docker 时,难免会涉及到数据问题。例如

  • 问题1:Docker 容器删除后,在容器中产生的数据还在吗?

          如下图所示,data1 和 data2 都是MySQL 容器中产生的数据,当mysql 容器被删除了,容器内部数据肯定也被删除掉。这样删除容器,岂不是相当于删库(赶紧跑路!),实在太危险了!那有没有什么办法可以解决这个问题呢?蛋定,有问题就会有解决方案。请继续阅读。
    在这里插入图片描述

  • 问题2:docker 容器和外部机器可以直接交换数据文件吗?

          docker 容器和外部机器是不可以直接交换数据文件的。如下图所示,外部机器不能直接访问到 mysql 容器的数据文件。在这里插入图片描述

  • 问题3:容器之间想要进行数据交互,怎么办?

          我们都知道,docker 采用沙箱机制,容器都是独立互不影响。那么,怎么解决这个问题呢?答案,便是引入数据卷概念。

二、docker 容器数据卷的概念和作用

  1. 引入数据卷
          面对以上三个问题,我们可以引入数据卷来解决问题。数据卷可以理解为宿主机中的一个目录或文件。
          请看下图,宿主机中有一个/data/mysql/data的目录。我们把这个目录挂载到 mysql容器1 和 mysql容器2 中。那么宿主机该目录下的数据就就相当于两个 mysql容器 中的数据。三者之中,只要其中一处改变了数据,其他两处的数据也就改变了。

    在这里插入图片描述
          那么思考的三个问题也就迎刃而解了。
          对于问题一,当容器删除了,宿主机中的数据还在。重新建容器时,把目录挂载上,数据就还原了。妈妈再也不用担心,容器删除了,数据也被删除的问题。
          对于问题二,外部机器直接访问宿主机的/data/mydql/data,就可以交换数据文件了。我们测试环境搬移到生产环境时,就需要把这些挂载的数据卷,拉取到生产机器上。
          对于问题三,mysql容器1 和 mysql容器2 挂载同一个目录,只要其中一个改变了数据,另外一个容器的数据就相当于改变了。例如 mysql容器1 新增了一张用户表user,mysql容器2也就多了一张用户表 user。从而达到数据交互。

  2. 数据卷的概念

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷
  1. 数据卷的作用
  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

三、配置 docker 容器数据卷

  • 创建启动容器时,使用 –v 参数 挂载数据卷.
    docker run … –v 宿主机目录( 文件): 容器内目录( 文件) …
    如下:其中\是换行拼接命令的作用,-v 是挂载数据卷,-e是设置环境变量,-d 是后台运行。

    docker run --name mysql -p 3306:3306 \
    -v /data/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=password \
    -d mysql:5.7
    注意事项:
    1. 挂载目录是绝对路径
    2. 如果目录不存在,会自动创建
    3. 一个容器可以挂载多个数据卷
    

最后我们一般都会挂载容器的数据目录、配置文件和日志数据卷,以便我们环境搬迁和持久化数据。

四、小结

      本文通过提出的三个问题,进而引入数据卷概念作用,以及配置数据卷。文章到这里就结束了,如有兴趣,请看下一篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值