前言
本文仅介绍Docker数据卷、具名挂载、匿名挂载、容器间数据共享
完整版Docker教程请移步:Docker 完整版教程笔记
Docker 数据卷
- 容器的持久化和同步操作
- 容器间的数据共享
挂载数据卷
# -v 挂载容器文件到本地指定路径
docker run -it -v 主机路径:容器路径 镜像名 bash
[root@VM-16-4-centos docker]# docker run -it -v /root/docker:/home python bash
root@5713f008c70b:/# pwd
/
root@5713f008c70b:/# cd /home
root@5713f008c70b:/home# ls
docker_v
root@5713f008c70b:/home# cat docker_v
root@5713f008c70b:/home# echo 挂载 > docker_v
root@5713f008c70b:/home# cat docker_v
挂载
root@5713f008c70b:/home#
exit
[root@VM-16-4-centos docker]# cat docker_v
挂载
[root@VM-16-4-centos docker]#
-
修改文件只需要在本地修改即可,容器内会自动同步!
-
删除容器后,挂载在本地的数据卷依旧没有消失,即容器的持久化!
具名挂载和匿名挂载
具名挂载
[root@VM-16-4-centos ~]# docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
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
Run 'docker volume COMMAND --help' for more information on a command.
# 查看volumes列表
[root@VM-16-4-centos ~]# docker volume ls
DRIVER VOLUME NAME
local f2ca5c3e4d50011c23484c04dbe1389b84e4b5cd4ccdc3c5fe0727a7cb506d4f
local nextcloud-example_acme
local nextcloud-example_certs
local nextcloud-example_db
local nextcloud-example_html
local nextcloud-example_nextcloud
local nextcloud-example_vhost.d
#具名挂载
[root@VM-16-4-centos ~]# docker run -it -v volumes_name:/home python bash
root@17a1cd2bf41f:/#
exit
[root@VM-16-4-centos ~]# docker volume ls
DRIVER VOLUME NAME
local f2ca5c3e4d50011c23484c04dbe1389b84e4b5cd4ccdc3c5fe0727a7cb506d4f
local nextcloud-example_acme
local nextcloud-example_certs
local nextcloud-example_db
local nextcloud-example_html
local nextcloud-example_nextcloud
local nextcloud-example_vhost.d
local volumes_name
# -v 卷名:容器内路径
[root@VM-16-4-centos ~]# docker volume inspect volumes_name
[
{
"CreatedAt": "2022-07-02T13:14:23+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/volumes_name/_data",
"Name": "volumes_name",
"Options": null,
"Scope": "local"
}
]
# 挂载卷本地路径
"Mountpoint": "/var/lib/docker/volumes/volumes_name/_data"
匿名挂载
# 查看当前已挂载卷信息
[root@VM-16-4-centos ~]# docker volume ls
DRIVER VOLUME NAME
local 4b141a71816e9afde2b99000408c463fa2d083185f636338fd3730fb96b76524
local 18b88b7ec6b3493bdb64e3d44b3502cf2a8dfcd3db0bb6007ff4c351a5c97210
local 7084c84ab678249b5d94aac5dd75f4ee4593190817826e3a500f028b0a6d853c
local ababaeecc1ec0a57c05093c00b6572570bfb132603389cbaa19a49fe47bc4863
local f2ca5c3e4d50011c23484c04dbe1389b84e4b5cd4ccdc3c5fe0727a7cb506d4f
# 匿名挂载
[root@VM-16-4-centos ~]# docker run -idt -v /home python bash
16d35a25083ead16a9458b7722df79427de5f5c19e861bfc442ca56a99aa08dd
[root@VM-16-4-centos ~]# docker volume ls
DRIVER VOLUME NAME
local 4b141a71816e9afde2b99000408c463fa2d083185f636338fd3730fb96b76524
local 18b88b7ec6b3493bdb64e3d44b3502cf2a8dfcd3db0bb6007ff4c351a5c97210
local 085c3ac7e4c1dec6a32fe3a3305b10a72d94af1e569c1e212988ac0054695df4
local 7084c84ab678249b5d94aac5dd75f4ee4593190817826e3a500f028b0a6d853c
local ababaeecc1ec0a57c05093c00b6572570bfb132603389cbaa19a49fe47bc4863
local f2ca5c3e4d50011c23484c04dbe1389b84e4b5cd4ccdc3c5fe0727a7cb506d4f
# local 7084c84ab678249b5d94aac5dd75f4ee4593190817826e3a500f028b0a6d853c
# 查看新增卷信息
[root@VM-16-4-centos ~]# docker volume inspect 085c3ac7e4c1dec6a32fe3a3305b10a72d94af1e569c1e212988ac0054695df4
[
{
"CreatedAt": "2022-07-17T00:11:31+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/085c3ac7e4c1dec6a32fe3a3305b10a72d94af1e569c1e212988ac0054695df4/_data",
"Name": "085c3ac7e4c1dec6a32fe3a3305b10a72d94af1e569c1e212988ac0054695df4",
"Options": null,
"Scope": "local"
}
]
# 挂载卷本地路径
"Mountpoint": "/var/lib/docker/volumes/085c3ac7e4c1dec6a32fe3a3305b10a72d94af1e569c1e212988ac0054695df4/_data"
本机挂载数据卷的路径规则
- /var/lib/docker/volumes/卷名/_data
# 如何判断具名挂载和匿名挂载
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载
拓展
# 通过-v 容器内路径:ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 读写
# 一旦设置了容器读写权限,容器对我们挂载出的内容就有了限制!
# ro 该路径只能通过宿主机操作,容器内无法操作!
[root@VM-16-4-centos ~]# docker run -it -v volumes_name:/home python:ro bash
[root@VM-16-4-centos ~]# docker run -it -v volumes_name:/home python:rw bash
容器间的数据共享
#--volumes-from 共享的容器名
docker run -d -v /home/docker --name python01 python_volume
docker run -d -v /home/docker --name python02 --volumes-from python01 python_volume
# 实现两个容器的数据同步!
# 若多个容器进行数据同步,删除其中一个,数据不会丢失!拷贝概念!