Docker学习02 - Docker的数据卷

Posted on 2021-10-26 20:11  努力的白皮  阅读(85)  评论(0)    收藏  举报

Docker容器的数据卷

数据卷概念

思考1: docker删除后,容器中产生的数据还在吗?

思考2: docker容器和外部机器能够直接交换文件吗?

思考3: 容器之间如何进行数据交换?

答案:

1 不在了

2 不能

3 数据卷!

数据卷:是一个宿主机中的目录或者文件。使用挂载将宿主机目录挂到容器中。

使用数据卷,可以解决上面的3个问题。

image

特性:

  • 容器目录和数据卷绑定后,对方的修改会立即同步

  • 一个数据卷可以被多个容器同时挂载

  • 一个容器也可以被挂载多个数据卷

作用:

  • 容器数据持久化
  • 外部机器和容器的通信
  • 容器之间的数据交换

数据卷命令

  • 配置数据卷

    创建容器时,通过使用-v参数设置数据卷

    1目录必须为绝对路径

    2不管是宿主机还是容器,目录不存在都会自动创建

    3可以挂载多个数据卷

挂载方式1:

docker run .... -v {宿主机目录or文件}:{容器内目录or文件} -v .... -v ....

挂载方式2:

# 这种方法-v后面代表容器内部的目录,在宿主机中,是在docker内部创建一个临时目录存放
docker run .... -v {目录}

image

验证:

image

image

我们可以让2个容器同时挂载宿主机上的数据卷,达到多个容器共享数据的作用

数据卷容器

多容器进行数据交换:

1 多个容器挂载同一个数据卷

2 docker提供了专门用来做数据卷的容器-数据卷容器

结构

image

说明:c1容器和c2容器挂载c3容器的目录,而这个目录是由宿主机挂载到c3上面的

配置数据卷容器

1 创建 数据卷容器

docker run -idt --name volume_container -v /home/zhaozijian/docker_share:/datas nginx /bin/bash

此时我们可以使用docker inspect命令,查看binds属性,可以看到它的挂载磁盘。

source代表宿主机目录,Destination代表容器内部的目标目录

image

2 创建c1 c2容器

docker run -idt --name c1 --volumes-from volume_container nginx /bin/bash
docker run -idt --name c2 --volumes-from volume_container nginx /bin/bash

我们再次使用docker inspect查看c1或者c2,发现他和volume_container的挂载是相同的,我们可以通过管理volume_container来实现多个容器的同时管理

docker inspect c1

image