51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Docker之数据卷管理

挂载数据卷类似于mount命令,将一个目录作为一个单独的卷挂载到容器中,也可以将多个容器共享一个卷,方便了容器之间的数据共享

在容器中挂载数据卷

使用busybox镜像,创建一个数据卷挂载到容器的/data目录
docker run --name web1 -it -v /data busybox

|---|---------------------------------------------| | 1 | docker run --name web1 -it -v /data busybox |

在另一个终端中使用以下命令查看容器和宿主机挂载目录
docker inspect --format='{{range.Mounts}}{{.Source}} {{.Destination}}{{end}}' web1

|---|------------------------------------------------------------------------------------| | 1 | docker inspect --format='{{range.Mounts}}{{.Source}} {{.Destination}}{{end}}' web1 |

/var/lib/docker/volumes/01a269c6a100482243ed9237809e17249c2e6e49144152132158725128fad94e/_data /data

此时我们可以看到宿主机的挂载目录

在/var/lib/docker/volumes/01a269c6a100482243ed9237809e17249c2e6e49144152132158725128fad94e/_data下,容器的挂载目录是/data

注意:-v指定的容器目录必须是绝对路径

挂载宿主机目录作为容器的数据卷(常用)
docker run --name web2 -it -v /data/volumes/web2:/data busybox

|---|----------------------------------------------------------------| | 1 | docker run --name web2 -it -v /data/volumes/web2:/data busybox |

冒号前面的/data/volumes/web2是宿主机的目录,冒号后面的/data为容器中的目录,该目录会在容器中自动进行创建

通过该方式挂载的数据卷默认权限是读写,如果只需要只读权限,则
docker run --name web2 -it -v /data/volumes/web2:/data:ro busybox

|---|-------------------------------------------------------------------| | 1 | docker run --name web2 -it -v /data/volumes/web2:/data:ro busybox |

注意:即使容器被删除,宿主机的目录也不会消失

容器之间共享数据卷

指在多个容器之间共享一份存储数据,类似于NFS功能

首先需要创建一个基础的容器命名为db1,并将其存储卷挂载到/data,为了演示效果,我这里使用-it选项,以交互式模式运行容器
docker run --name db1 -it -v /data busybox

|---|--------------------------------------------| | 1 | docker run --name db1 -it -v /data busybox |


echo "this is db1" > data/demo.html

|---|--------------------------------------| | 1 | echo "this is db1" > data/demo.html |


然后在新的终端中启动第二个容器命名为db2,使用--volumes-from参数挂载db1容器的存储卷
docker run --name db2 -it --volumes-from db1 busybox

|---|------------------------------------------------------| | 1 | docker run --name db2 -it --volumes-from db1 busybox |


此时在db2容器中可以看到db1存储卷data/的内容,并且在db2中修改增加删除data/下的内容,db1也会同步生效

注意:db1容器即使在停止的状态下,--volumes-from参数也同样有效

赞(8)
未经允许不得转载:工具盒子 » Docker之数据卷管理