docker volume
Docker的数据持久化主要有两种方式:
bind mount
volume
Docker的数据持久化即使数据不随着container的结束而结束,数据存在于host机器上——要么存在于host的某个指定目录中(使用bind mount),
要么使用docker自己管理的volume(/var/lib/docker/volumes下)。
bind mount
用于将host机器的目录mount到container中
将host机器上/data/host-data目录mount到container中的/container-data目录
docker run -it -v /data/host-dava:/container-data alpine sh
- host机器的目录路径必须为全路径
- 如果host机器上的目录不存在,docker会自动创建该目录
- 如果container中的目录不存在,docker会自动创建该目录
- 如果container中的目录已经有内容,那么docker会使用host上的目录将其覆盖掉
volume
volume也是绕过container的文件系统,直接将数据写到host机器上,只是volume是被docker管理的,
docker下所有的volume都在host机器上的指定目录下/var/lib/docker/volumes
将my-volume挂载到container中的/mydata目录:
docker run -it -v my-volume:/mydata alpine sh
# 查看volume 信息
[root@localhost data]# docker volume ls
DRIVER VOLUME NAME
local my-volume
[root@localhost data]# docker volume inspect my-volume
[
{
"CreatedAt": "2022-03-11T13:20:26+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my-volume/_data",
"Name": "my-volume",
"Options": null,
"Scope": "local"
}
]
# 创建volume
docker volume create my-volume-2
如果my-volume不存在,那么docker会自动创建my-volume,然后再挂载
与bind mount不同的是,
- 如果volume是空的而container中的目录有内容,那么docker会将container目录中的内容拷贝到volume中,
- 但是如果volume中已经有内容,则会将container中的目录覆盖。