目录

  • 前言
  • 一、volume
  • 1 volume 的使用场景
  • 2 volume 基本使用
  • 二、bind mount
  • 1 方法一(--mount)
  • 2 方法二(-v)
  • 3 -v和--mount的区别
  • 三、数据卷操作
  • 1 查看所有数据卷
  • 2 删除数据卷


前言

Docker Volume能让容器从宿主主机中读取文件或持久化数据到宿主主机内,让容器与容器产生的数据分离开来。你可以简单地把它理解为linux服务器上的挂载点。一个容器可以挂载多个不同的目录。Volume的生命周期是独立于容器的生命周期之外的,即使容器删除了,volume也会被保留下来,Docker也不会因为这个volume没有被容器使用而回收。在容器中,添加或修改这个文件夹里的文件也不会影响容器的联合文件系统。

一、volume

1 volume 的使用场景

卷是在Docker容器和服务中保存数据的首选方式。卷的一些用例包括:

  • 在多个运行容器之间共享数据。如果您没有明确创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然存在。多个容器可以同时安装相同的卷,无论是读写还是只读。仅当您明确删除卷时才会删除卷。
  • 当您想要将容器的数据存储在远程主机或云提供商上而不是本地时。
  • 当您需要备份,还原或将数据从一台Docker主机迁移到另一台时,卷是更好的选择。您可以停止使用卷的容器,然后备份卷的目录实现数据的备份和迁移(如/var/lib/docker/volumes/)。

2 volume 基本使用

创建数据卷

docker volume create vol-1

启动一个容器并挂载数据卷
–mount 语法:

–mount type=volume, source=数据卷名, target=容器中的挂载点

type 的值可以是 volume , bind ,tmpfs 默认是 volume

source 也可以简写成src

target可以简写成 dst

在用 docker run 命令的时候,使用 --mount标记来将 数据卷 挂载到容器里。

docker run -itd --mount source=vol-1,target=/tmp --name centos7-1 centos:7

二、bind mount

就是挂载主机目录

与卷相比,绑定安装具有有限的功能。

当您使用绑定挂载时,主机上的文件或目录被挂载到容器中。主机上的文件或目录必须是完整路径。

挂载点不存在时,它会根据需求被创建。

1 方法一(–mount)

$ docker run -it --name web --mount type=bind,source=/src/webapp,target=/opt/webapp/  centos:7  bash

使用 --mount 参数时如果本地目录不存在,Docker 会报错,并且source 指定的本地文件路径必须是据对路径

Docker 挂载主机目录的默认权限是 读写,用户也可以通过增加 readonly 指定为 只读。

$ docker run -it --name web --mount type=bind,source=/src/webapp,target=/opt/webapp/,readonly  centos:7  bash

2 方法二(-v)

docker run -it -v /src/webapp:/opt/webapp centos:7

3 -v和–mount的区别

使用-v 或者 --mount标志可将绑定挂载和卷挂载到容器中
在Docker 17.06及更高版本中,官方建议使用 --mount,因为语法更清晰。

三、数据卷操作

1 查看所有数据卷

docker volume ls

2 删除数据卷

docker volume rm 数据卷名称
docker volume rm vol-1

数据卷可能会占据很多空间,可以使用以下命令清理掉没有容器使用的 数据卷。
谨慎操作,这需要你确认现在暂时没有使用数据卷在以后也不会再使用,里面也没有有价值的数据。

$ docker volume prune