如何开始docker - 数据管理

前言

在docker中,如果没有挂载数据卷,默认数据都是保存在容器里面的,如果容器被删除,数据就没了。

如何开始docker - 数据管理


数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

数据卷可以在容器之间共享和重用

对数据卷的修改会立马生效

对数据卷的更新,不会影响镜像

数据卷默认会一直存在,即使容器被删除

¥45.04
购买

创建一个数据卷

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 - 数据管理


挂载主机目录作为数据卷

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

如何开始docker - 数据管理

相关推荐