如何开始docker - 数据管理
前言
在 docker 中,如果没有挂载数据卷,默认数据都是保存在容器里面的,如果容器被删除,数据就没了。
数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
-
数据卷可以在容器之间共享和重用
-
对数据卷的修改会立马生效
-
对数据卷的更新,不会影响镜像
-
数据卷默认会一直存在,即使容器被删除
创建一个数据卷
docker volume create dbdata
可以看到在 data-root(默认是/var/lib/docker)下的 volumes 目录就可以看到有一个目录生成,这个就是数据卷。
查看数据卷
docker volume ls
查看数据卷详情
docker volume inspect dbdata
删除指定的数据卷
docker volume rm dbdata
清理所有无主的数据卷
docker volume prune
上面创建的数据卷,没有跟容器关联,需要在容器创建的时候,使用 docker run 指定数据卷
docker run -itd -v dbdata:/data alpine:latest /bin/sh
如果这个数据卷没有在,也会自动创建这个数据卷的
也可不指定名称:
docker run -itd -v /data alpine:latest /bin/sh
这时候生成的目录的名称就不是指定的名字,而是一长串 ID
在 Dockerfile 创建的时候也可以使用 VOLUME 这个指令创建数据卷。
挂载主机目录作为数据卷
docker run 的时候 -v 参数指定的是本地的绝对路径,就是挂载本地的目录到容器里面使用。
docker run -itd -v /data/dbdata:/data alpine:latest /bin/sh
如果本地目录不存在,会自动创建。这个挂载的目录是不受 docker volume 管理的,因此就算是 docker rm -v 也不会删除这个目录里面的数据,因此,在实际中一般是用这种方式,将我们的代码目录挂载到容器里面去运行。
默认容器里面对目录是有读写权限,如果只需要指定可以加上:ro 的选项即可:
docker run -itd -v /data/dbdata:/data:ro alpine:latest /bin/sh
除了目录可以挂载,单个文件也是可以挂载的,挂载后,容器里面对应的文件是只读的,写操作之后在宿主机上操作
docker run -itd -v /data/dbdata:/data -v /etc/my.cnf:/etc/my.cnf alpine:latest /bin/sh
数据卷容器
如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。
创建数据卷容器
docker run -itd -v /data/dbdata:/data -v /data/dbdata1:/data1 --name dbdata alpine:latest /bin/sh
使用数据卷容器
docker run -itd --volumes-from dbdata apline:latest /bin/sh
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2019/2019-03/docker10/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。