Docker 镜像使用时,为了能够将数据持久化(即数据不随着Container的结束而结束,数据存在宿主机中),需要将数据挂载到容器中.

1. Docker 数据挂载方式

https://docs.docker.com/storage/volumes/

Docker 提供了三种数据挂载方式,示意图如:

3.1. bind mount

bind mount 是 Docker 中比较常用的将宿主机目录挂载到容器中的方式. 但在不同的宿主机系统时不可移植的,比如 Windows 和 Linux 的目录结构是不一样的,宿主机目录也不能一样.

其使用如:

docker run -it -v /path/to/host:/path/to/container image_name sh

其有如下特点:

[1] - 宿主机路径必须为绝对路径.

[2] - 宿主机或容器内路径不存在,Docker 会自动创建.

[3] - 容器内路径如果已存在不为空,Docker 会把宿主机路径将其覆盖.

3.2. tmpfs mount

tmpfs mount 挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统.(一般都不会用该方式)

注:

tmpfs,临时文件系统,是一种基于内存的文件系统,可以使用RAM,也可以使用swap分区来存储. tmpfs是最好的基于RAM的文件系统.

From: 百度百科

3.3. volume

volume 是 被Docker 所管理的,绕过了容器的文件系统,来管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 路径. 所有容器的数据都保存在该路径,如果在创建时指定卷,Docker默认会创建许多匿名卷.

2. Docker volume

docker volume -h 
docker volume COMMAND

如:

  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

2.1. 创建 volume

docker volume create test_volume

2.2. 列出所有 volume

docker volume ls

2.3. 查看 volume 详细信息

docker volume inspect test_volume

2.4. 清空无用 volume

docker volume prune

2.5. 删除 volume

docker volume rm test_volume

2.6. volume 使用示例

如:

docker run -it -v test_volume:/path/to/container image_name sh

3. Docker volume 远程挂载服务器路径

在 Docker 容器内使用远程服务器路径数据有两种方式:

[1] - 直接在容器内使用 sshfs 或nfs 挂载.

Ubuntu - sshfs 远程服务器目录挂载工具 - AIUAI

Ubuntu - 挂载 NFS 服务器的文件系统到本机 - AIUAI

[2] - 采用 vieux/sshfs 插件和 Docker volume

3.1. sshfs 与 docker volume

[1] - 安裝 vieux/sshfs 插件,如:

docker plugin install --grant-all-permissions vieux/sshfs

[2] - 通过 vieux/sshfs 驱动创建数据卷 volume

 docker volume create --driver vieux/sshfs \
     -o sshcmd=username@serverIP:/path/to/datas/ \
     -o password=username_password \
     test-volume

创建成功后,可以查看创建的数据卷,如:

docker volume ls

[3] - 挂载数据卷volume

如:

docker run -it --shm-size 125G -v /data:/data -v test_volume:/test  test-images:v1
Last modification:April 18th, 2021 at 06:58 pm