- 数据卷可以在容器之间共享和重用。
- 对数据卷的更改会立即生效。
- 对数据卷的更新不会影响镜像。
- 数据卷会一直存在,直到没有容器使用。
$ docker volume create my-data //创建一个自定义数据卷$ docker volume ls //查看所有数据卷$ docker volume inspect my-dat //查看指定数据卷的详细信息[{"CreatedAt": "2021-04-06T01:20:50Z","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/my-data/_data","Name": "my-data","Options": {},"Scope": "local"}]//启动一个 nginx 容器并设置容器使用我们刚才创建的 my-data 数据卷$ docker run -d -it --name=my-nginx -p 8888:80 -v my-data:/usr/share/nginx/html nginx//之后我们删除 my-nginx 容器,但是其对应的数据卷并没有删除,再创建另外一个 nginx 容器的时候依然可以继续使用 my-data 数据卷,则以前的数据依然保留。而且我们还可以启动多个nginx 容器,共享同一个数据卷。
由于在 mac 和 windows 系统上,docker 的运行方式不太一样(在win、mac 上安装 docker,实际上是安装了一个 docker 虚拟机,而我们创建的容器都是跑在 docker 虚拟机中的)。
macOS 下进入虚拟机
$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty//docker 版本小于18.06 则使用如下命令$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
清理数据卷
// 删除自定义数据卷$ docker volume rm my-data
挂载目录(可以使用多个-v)
$ docker run -it -v 宿主机目录绝对路径:容器内目录绝对路径 镜像名
匿名挂载(只指定容器内的目录)
//docker 会自动创建一个 随机名字的 volume,并和centos 的 home 目录绑定$ docker run -d -v /home centos
具名挂载(设置 volume 具体名称进行挂载)
//docker 会自动创建一个名字为 abc 的 volume,并和centos 的 home 目录绑定$ docker run -v abc:/home centos
数据卷容器
数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
_
//创建一个数据卷容器dbdata$ docker run -it -v /dbdata --name dbdata ubuntu//然后,可以在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷.//例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:$ docker run -it --volumes-from dbdata --name db1 ubuntu$ docker run -it --volumes-from dbdata --name db2 ubuntu
- 容器 db1 和 db2 都挂载同一个数据卷到相同的 /dbdata 目录。三个容器任何一方在该目录下的写入,其他容器都可以看到。
- 可以多次使用 —volumes-from 参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。
- 使用 —volumes-from 参数所挂载数据卷的容器自身并不需要保持在运行状态。
- 如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用 docker rm -v 命令来指定同时删除关联的容器。
