docker volume

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和重用
  • 对 数据卷 的修改会立马生效
  • 对 数据卷 的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。open in new window

mount-with-run

docker run -d -P \
    --name web \
    --mount source=my-vol,target=/usr/share/nginx/html \
    nginx:alpine
# 上下两种用法一样
docker run -d -P \
    --name web \
    -v my-vol:/usr/share/nginx/html \
    nginx:alpine
1
2
3
4
5
6
7
8
9

注意

同时 -v 还可以直接挂载本地绝对路径

-v /path/to/local/a:/path/to/container/a

当路径不存在时会直接创建路径

volume

概念

volume 的概念 就是一块存储空间

docker volume create 时 只是创建一个空的可用的存储空间 并不会将任何东西放进去

docker volume
    create __name # 创建卷
    ls
    inspect __name # 查看卷信息
    rm __names
    prune
1
2
3
4
5
6

Dockerfile

VOLUME ["/data","/var/log"]
VOLUME /data /var/log
1
2

VOLUME 创建挂载点并标记为本地或者来自其他容器 可以配合 --volume-from(docker run) 使用

示例

在第一个容器 /data 路径下 创建一个文件 并在另一个容器中查看

$ sudo docker run -v /data -it --name ap alpine /bin/ash
/ # ls data
/ # touch data/{1..20}.txt
/ # ls data
{1..20}.txt
/ # %     
# Ctrl + p + q 退出容器
$ sudo docker run --rm --volumes-from ap alpine ls /data
{1..20}.txt
1
2
3
4
5
6
7
8
9

详细介绍open in new window