Docker-持久化数据存储
1:为什么容器需要持久化存储
- 在实际业务总是有各种需要持久化场景,比如MySql,kafka等有状态的业务,因此Docker提出了 卷 的概念
- 卷的本质是文件或目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于主机上。 卷 的概念不仅解决了数据持久化的问题,还解决了容器间共享数据的问题。使用卷可以将容器内的目录或文件持久化,当容器重启后数据不会丢失
2:Docker卷的操作
- 创建数据卷
- docker volume create myvolume
- 除了手动创建我们也可以在容器启动时候指定:docker run -d --name=nginx-volume
-v /usr/share/nginx/html nginx
- 查看数据卷
- 删除数据卷
- 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会把主机上的目录直接映射到容器的指定目录下,实现数据持久化