如果想让数据持久保留:
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