实验环境docker-engine版本V1.13
根据v1.13版的docker文档,说明了volume的几个特点:
- 可以绕过文件系统,存在于一个或多个容器中
- 独立于容器的生命周期,并且在容器销毁以后,volume 不会被自动删除或是垃圾回收
- 分三类:
- host volume:在宿主机上,可从容器内访问
- named volume:docker管理volume位置,有名字
- anonymous volume:docker管理volume位置,没有名字
docker volume命令有下面几个子命令:
1、docker volume create
最基本的,创建本地卷:
[root@localhost ~]# docker volume create hello
hello
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local hello
创建一个自定义参数的卷:
create
命令可以创建一个卷,默认的driver是local
,它类似于linux中的mount
命令,也可以挂上几个自定义的参数,如下: type
表示文件系统类型,device
表示设备,o
表示mount
命令的参数,用,
分隔不同的参数
[root@localhost ~]# docker volume create --driver local \
--opt type=tmpfs \
--opt device=tmpfs \
--opt o=size=100m,uid=1000 \
foo
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local foo
运行一个容器并挂载这个卷
[root@localhost ~]# docker run -it --rm -v foo:/opt/foo busybox /bin/sh
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
1cae461a1479: Pull complete
Digest: sha256:c79345819a6882c31b41bc771d9a94fc52872fa651b36771fbe0c8461d7ee558
Status: Downloaded newer image for busybox:latest
/ # cd opt/
/opt # ls -l
total 0
drwxrwxrwt 2 1000 root 40 May 11 17:57 foo
可以看到,卷已经挂载了,并且uid设置为了1000
创建一个网络目录作为卷:
[root@localhost /]# docker volume create --driver=local \
--opt type=nfs \
--opt o=addr=192.168.0.105,rw \
--opt device=:/opt/test \
foo
foo
查看卷foo的详细信息:
[root@localhost /]# docker volume inspect foo
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/foo/_data",
"Name": "foo",
"Options": {
"device": ":/opt/test",
"o": "addr=192.168.0.105,rw",
"type": "nfs"
},
"Scope": "local"
}
]
运行一个容器测试卷的情况:
[root@localhost /]# docker run -it --rm -v foo:/opt/foo busybox /bin/sh
/ # cd /opt/foo
/opt/foo # ls
hahaha
可以看到,在/opt/foo
目录中有网络卷中创建的文件,挂载成功。
2、docker volume inspect
这个命令比较简单,只有一个参数--format, -f
这也是docker中各种inspect
命令中相同的特点,栏目1中已经使用过这个命令,这里加入参数指定要查看的项:
[root@localhost /]# docker volume inspect --format '{{ .Mountpoint }}' foo
/var/lib/docker/volumes/foo/_data
对比栏目1中的结果,这里显示的特定的输出。
3、docker volume ls
这个命令也比较简单,和inspect
类似,可以通过--format, -f
指定输出的格式,由于volume有下表中的几个属性,所以可以根据他们进行定制输出:
属性 | 描述 |
Driver | 卷驱动 |
Labels | 标签 |
Mountpoint | 宿主机挂载点 |
Name | 名称 |
Options | 挂载参数 |
Scope | 作用域 |
如下命令定制输出的信息:
[root@localhost /]# docker volume ls --format "{{.Name}}: {{.Driver}}"
foo: local
foo1: local
foo2: local
--quiet, -q
命令可以简洁的只输出volume名,方便作为参数输入到别的命令中去。
[root@localhost /]# docker volume ls --quiet
foo
foo1
foo2
4、docker volume prune
删除所有没用的volume,危险操作,慎用!
5、docker volume rm
删除指定的volume
[root@localhost /]# docker volume rm foo2
foo2