docker数据持久化

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 04:43:55

如果想让数据持久保留:

1、Docker 的绑定挂载功能,这个功能可以将宿主系统的文件或文件夹挂载到容器里

2、使用 Docker 卷来创建一个卷并挂载到容器里。

下面我们就一起来了解下这两种方法以及如何使用。

 

Docker 绑定挂载

Docker 绑定挂载可以让宿主系统的文件夹挂载到容器里,常用于文件共享,也可以用于数据持久化,不过官方更推荐使用 Docker 卷(等会讲)。

绑定挂载需要在创建容器的时候进行挂载,挂载的方式也很简单,只需要添加-v参数。

例如:

在宿主系统创建一个/tmp/jason文件夹并创建一个test文档,文档内容为“hello,jason”:

mkdir /tmp/jasonecho "hello,jason" >/tmp/jason/test.txt

查看test.txt

 

 

 创建一个容器将刚刚创建的文件夹挂载到容器里

docker run -itd -v /tmp/jason:/test --name mivm alpine /bin/sh

-v后面的两个参数,第一个是宿主系统路径,第二个是挂载目标路径,可以用来挂载文件夹,也可以用来挂载文件,而且可以挂载多个,只需要添加多个-v即可,如果宿主系统里不存在文件夹,Docker 会自动创建文件夹。

默认情况下 mount 的数据是可读可写的。我们可以添加 ro 参数设置成只读权限,此时:

    • 在容器中无法对 bind mount 数据进行修改。 
    • 只有 host 有权修改数据。

例如:

docker run -itd -v /tmp/jason:/test:ro  --name mivm alpine /bin/sh

 

 我们从容器修改文件,会发现没有权限

 

 

如果容器目标文件夹里有文件,宿主机文件夹没有文件,则容器的文件夹会被隐藏

 

验证

使用容器读取刚刚挂载的文件夹的文件,看是否和宿主机上的test.txt文件类容一样

docker exec mivm cat /test/test.txt

 

 

 在容器创建一个新的文本文档mivm.txt,在宿主机上查看

docker exec mivm /bin/sh -c "echo \"Hello mivm\" > /test/mivm.txt"

 

 

 删除容器,查看宿主机文件是否还存在

docker stop mivm &&docker rm mivm

查看宿主机

 

 

 

新创建容器   mivm-test绑定挂载宿主机刚才的目录,来继续使用刚才的文件

docker run -itd -v /tmp/jason:/test --name mivm-test  alpine /bin/sh

进入容器查看  /test目录

docker exec -it mivm-test /bin/sh

 

 可以看到文件还在

 

这是第一种数据持久化的方法,在大多数情况下都适用

 

 

Docker 卷

如果想持久化容器里已有的文件,需要创建一个 Docker 卷,把卷挂载到容器里的/usr/bin,由于 Docker 卷的特性,新卷可以通过容器预先填充内容,所以容器里的/usr/bin的内容会被写入到卷里。

  • 创建:docker volume create
  • 删除某个卷:docker volume rm 卷名    删除卷之前先确保卷没有被容器使用
  • 删除所有未使用的卷:docker volume prune
  • 列出所有卷:docker volume ls
  • 查看某个卷的信息:docker volume inspect 卷名

例子:

创建一个volume卷

docker volume create mivm-data

查看该卷

 

 

验证:

创建一个容器将刚刚创建的卷挂载到容器里

docker run -itd -v mivm-data:/tmp/test --name mivm alpine /bin/sh

 

 -v后面的两个参数,第一个是卷名称,第二个是挂载目标路径,卷名称必须存在,Docker 不会自动创建卷。

 

列出容器的文件

docker exec mivm ls /tmp/test

 

 可以看到是空的

 

使用容器向挂载点写入文件

docker exec mivm /bin/sh -c "echo \"Hello mivm\" > /tmp/test/mivm.txt"

结束并删除掉容器

docker stop mivm && sudo docker rm mivm

重新创建新容器并挂载mivm-data卷

docker run -itd -v mivm-data:/tmp/test --name mivm-test-1 alpine /bin/sh

 

 读取我们刚刚写入的文件

docker exec mivm-test-1 cat /tmp/test/mivm.txt

 

 

参考:

https://www.hangge.com/blog/cache/detail_2403.html

http://c.biancheng.net/view/3203.html

https://www.qikqiak.com/k8s-book/docs/6.数据共享与持久化.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!