数据卷和目录挂载

我们知道Docker容器它仅仅是镜像的一个实例,需要持久化保存的数据不应该直接保存到Docker容器中。数据卷是一个可供容器使用的特殊目录,专门用来持久化数据。除此之外,我们也可以将一个宿主机的目录或文件挂载到容器中。

数据卷

使用命令行参数挂载数据卷

我们可以在docker run时,使用参数-v创建并挂载一个数据卷。

下面例子中,我们启动了Ubuntu 14.04的Bash Shell并进入交互式终端模式,和之前不同的是我们挂载了一个数据卷到/mnt/appdata目录。

docker run -it -v /mnt/appdata ubuntu:14.04 bash

我们使用docker inspect查看该容器详细信息时,可以在Mounts节点看到相关信息。

输出表明,我们在容器中,挂载了宿主机的/var/lib/docker/volumes/2de1c4cd59ed377323e8eebaa6344abed5919273bc6bfbf76389bbdd3b852522/_data到了容器的/mnt/appdata目录。

上面创建数据卷挂载的宿主机目录是Docker给我们生成的,它也是不可移植的,因为如果我们再次用上述命令创建新的容器,它还会生成另一个数据卷。因此,另一种方式是指定宿主机的挂载点,将在后文介绍。

查看所有数据卷

执行以下命令可以查看数据卷信息。

docker volume ls

删除数据卷

删除容器时,使用docker rm -v <容器ID>可以一同删除容器和数据卷。如果不指定-v参数,数据卷不会自动删除。

此外,如果容器已经被删除了,我们也可以使用下面命令单独删除数据卷。

docker volume rm <数据卷NAME>

注意:如果容器还存在,数据卷是无法单独删除的。

清理无用数据卷

我们在开发机上使用Docker测试运行时,由于Docker默认删除容器时不会删除数据卷,因此我们的电脑上可能会产生一大堆无用的数据卷,如下命令可以进行自动清理。

docker volume prune

注意:操作生产环境服务器时,执行该命令要谨慎,避免误删数据!

挂载宿主机目录或文件

除了创建数据卷,我们也可以将宿主机的目录或文件直接挂载到容器中,该操作常用于加载位于宿主机上的配置文件,下面是一个例子。

docker run -it -v /home/ubuntu:/mnt/appdata ubuntu:14.04 bash

上述命令会将宿主机的/home/ubuntu目录挂载到容器内/mnt/appdata下,我们可以通过docker inspect命令进行观察。不过要注意的是,Dockerfile中是无法指定这种挂载模式的,只能在创建容器时通过命令行-v参数指定。挂载指定目录或文件时也要注意,如果容器中已经存在同目录或文件,那么挂载时将会被覆盖,因此这里不要误操作将容器中重要数据清空。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。