Volume提供了独立于容器之外的持久化存储,以及容器与容器之间的共享数据。
- 创建数据卷
在docker run 命令中加-v选项可以创建数据卷。下面运行一个ngnix容器,通过-v挂载一个卷。
当我们创建一个容器的时候,docker会自动对它进行命名。也可以使用--name
标识来命名容器。
容器运行起来后可以通过docker inspect
命令来查看容器的信息,这里我们主要关心下面这块内容:
其中Source的值就是挂载到本地的目录地址。Docker 将本地一个 _data 目录 mount 为容器内的 /usr/share/nginx/html 目录了。我们可以进入此目录查看一下,发现有两个nginx的缺省文件。
修改index.html文件的内容:
使用下面的命令进入容器bash
docker exec -it container-id或者container-name /bin/bash
这里-it
表示以交互的方式运行
可以发现在容器中查看index.html的内容已经被修改。
注意,在 容器被删除后,/var/lib/docker/volumes/f143b7f379fb6d012a08656fc950bf6df4bf5a5b90c72f310644aa997620122b/_data 目录及其中的内容都还会保留下来,但是,新启动的容器无法再使用这个目录,也就是说,已有的数据不能自动地被重复使用了。
- 挂载本地文件作为数据卷
docker目录下创建一个html目录,在html目录创建index.html文件:
使用下面的命令将本地目录挂载到容器上。
修改html目录下的index.html文件,就可以反应到容器当中。
这是方式和第一种方式没有本质区别,在第一种方式中没有指定本地挂载的目录,而是由docker自己指定,对于当前这种方式是由我们自己指定一个本地目录来挂载。重新启动容器时,可以再次使用同样的方式来将 html 目录挂载到新的容器内,这样就可以实现数据持久化的目标。
- 容器数据卷
在docker目录下创建一个data目录,然后使用下面的命令创建一个新的容器
docker create
命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。注意,这个容器并没有运行。
使用下面的docker命令将上面新的容器挂载另一个容器当中去。这个容器可以被多个容器挂载,做到数据共享。
其中-it
表示以交户的方式运行
进入mydata目录创建一个test.txt文件,然后退出容器,查看本地的data目录,发现里面也多了一个test.txt文件。
最后,可以使用 docker rm -v 命令在删除容器时删除该容器的卷。例如:docker rm -vf nginx-fun
,这样可以在删除nginx-fun容器同时删除它的卷。docker volume ls
命令查看卷。