Docker-持久化数据存储

489 阅读2分钟

1:为什么容器需要持久化存储

  • 在实际业务总是有各种需要持久化场景,比如MySql,kafka等有状态的业务,因此Docker提出了 的概念
  • 卷的本质是文件或目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于主机上。 的概念不仅解决了数据持久化的问题,还解决了容器间共享数据的问题。使用卷可以将容器内的目录或文件持久化,当容器重启后数据不会丢失

2:Docker卷的操作

  • 创建数据卷
    • docker volume create myvolume
    • 除了手动创建我们也可以在容器启动时候指定:docker run -d --name=nginx-volume -v /usr/share/nginx/html nginx
  • 查看数据卷
    • docker volume ls
  • 删除数据卷
    • docker volume rm myvolume

3:容器与容器之间数据共享

  • 1:创建一个共享日志的数据卷
    • docker volume create log-vol
  • 2:启动一个生产日志的容器
    • docker run --mount source=log-vol,target=/tmp/log --name=log-producer -it busybox
  • 3:然后启动一个消费者容器
    • docker run -it --name consumer --volumes-from log-producer busybox
    • 使用使用 volumes-from 参数可以在启动新的容器时来挂载已经存在的容器的卷, volumes-from 参数后面 跟已经启动的容器名称

4:Docker卷的工作原理

  • Docker容器并不是一个真正的文件系统,而是通过联合文件系统实现的一个伪文件系统,而Docker卷则是利用主机的某个文件或目录,他可以绕过联合文件系统,直接挂载主机上的文件或目录到容器中,这就是它的工作原理

5:Docker卷的实现原理

  • Dcoekr卷的实现原理是在主机的/var/lib/docker/volume目录下,根据卷的名称创建相应的目录,然后在每个卷的目录下创建_data目录,在容器启动时如果使用--mount参数,Docker会把主机上的目录直接映射到容器的指定目录下,实现数据持久化