volume
看了很多介绍,也没说清楚volume和container之间的关系、创建的时候应该怎么创建。这里把弄清楚的内容说明一下。
volume的作用:将container内的目录映射到宿主机host的实际路径,这样container上修改内容直接能保存到宿主机上。同样宿主机上对该目录的修改,也能在container看到。
volume和container的关系:
创建volume之后多个container可以共用volume,也可以每个container单独使用自己的volume。所以有两种创建方法:直接使用docker volume create命令创建,或者在docker run一个容器的时候用 -v 参数来创建。
volume创建时涉及三个比较绕的内容:名称,容器内的路径,宿主机的路径。下面分别将两种创建方法时如何设置上面三项说清楚。
- 直接使用docker volume create创建,暂时和container无关。
xxxx@n2800:~$ docker volume create --help
Usage: docker volume create [OPTIONS] [VOLUME]
Create a volume
Options:
-d, --driver string Specify volume driver name (default "local")
--label list Set metadata for a volume
-o, --opt map Set driver specific options (default map[])
可以看到,这个命令的可选项很少,至少宿主机内的路径是不可改的,只能是默认的/var/lib/docker/volume。
–driver的作用也不清楚。
–opt可以用来挂载nfs目录:
$ docker volume create --driver local
–opt type=nfs
–opt o=addr=192.168.1.1,rw
–opt device=:/path/to/dir
foo
创建一个名为test的volume,然后用docker volume inspect命令看一下。
xxxx@n2800:~$ docker volume inspect basic
[
{
"CreatedAt": "2020-04-26T21:01:32+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/basic/_data",
"Name": "basic",
"Scope": "local"
}
]
发现,最想更改的Mountpoint是不能更改的,没有可选项可以操作。至少docker网站没有找到。
并且这种创建方式,没有指定container中的路径,因为和container还不想关,需要在docker run命令中使用这个volume的名称。比如针对basic这个volume,例子:
docker run -it -v basic:/mydata alpine sh
- 在创建container时创建volume。
用docker run -v [host-dir]:[container-dir]:[rw|wo]在创建容器是直接创建volume
在这里可以指定宿主机的路径。
例子:
docker run --name xware -v /var/lib/xware/:/data -d zwh8800/xware
这个是一个离线迅雷的容器安装。这个时候volume的名字是自动生成的UUID。