Docker 镜像使用时,为了能够将数据持久化(即数据不随着Container的结束而结束,数据存在宿主机中),需要将数据挂载到容器中.
1. Docker 数据挂载方式
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 挂载.
[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