若是想让数据持久保留,两种方法:html
一、Docker 的绑定挂载功能,这个功能能够将宿主系统的文件或文件夹挂载到容器里docker
二、使用 Docker 卷来建立一个卷并挂载到容器里。spa
下面咱们就一块儿来了解下这两种方法以及如何使用。.net
Docker 绑定挂载可让宿主系统的文件夹挂载到容器里,经常使用于文件共享,也能够用于数据持久化,不过官方更推荐使用 Docker 卷(等会讲)。3d
绑定挂载须要在建立容器的时候进行挂载,挂载的方式也很简单,只须要添加-v
参数。code
例如:htm
在宿主系统建立一个/tmp/jason文件夹并建立一个test文档,文档内容为“hello,jason”:blog
mkdir /tmp/jason
echo "hello,jason" >/tmp/jason/test.txt
查看test.txt文档
建立一个容器将刚刚建立的文件夹挂载到容器里get
docker run -itd -v /tmp/jason:/test --name mivm alpine /bin/sh
-v
后面的两个参数,第一个是宿主系统路径,第二个是挂载目标路径,能够用来挂载文件夹,也能够用来挂载文件,并且能够挂载多个,只须要添加多个-v
便可,若是宿主系统里不存在文件夹,Docker 会自动建立文件夹。
默认状况下 mount 的数据是可读可写的。咱们能够添加 ro 参数设置成只读权限,此时:
例如:
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 卷,把卷挂载到容器里的/usr/bin
,因为 Docker 卷的特性,新卷能够经过容器预先填充内容,因此容器里的/usr/bin
的内容会被写入到卷里。
例子:
建立一个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