什么是数据卷

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

数据卷的作用

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

如何使用数据卷

使用绝对路径数据卷

1
docker run -id -v /宿主机的路径:/容器内的路径 镜像名

注意: 宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容

使用别名方式数据卷

1
2
3
4
5
6
docker run -id -v 别名:/容器内的路径 镜像名
# 例如
docker run -id --name mysql \
-v mysql_data:/var/lib/mysql \
-p 3306:3306 \
mysql:8

注意:

  • mysql_data代表一个数据卷别名,别名可以是任意的。
  • mysql_data这个数据别名可以省略,省略的时候docker会自动生成一串随机序列来充当这个数据卷的别名。
  • docker首次用到这个数据卷时会自动创建,数据卷已经存在时会使用原来的。
  • 第一次使用别名时会将容器中原始数据保留下来,使用绝对路径方式不会保留容器中原始数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 查看所有数据卷
lxy@DESKTOP-74EDKD3:~$ docker volume ls
DRIVER VOLUME NAME
local 456a70b64155be838c487db08ac50852060618d7cc6a16fb5275f80b6961d064
local b91ad14c73d03b5cffd5053592f7a6c80d6294ef4b0146c55ee943008d1d0612
local portainer_data

# 查看数据卷详细信息
lxy@DESKTOP-74EDKD3:~$ docker volume inspect portainer_data
[
{
"CreatedAt": "2022-06-08T07:31:45Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/portainer_data/_data",
"Name": "portainer_data",
"Options": null,
"Scope": "local"
}
]
#/var/lib/docker/volumes/portainer_data/_data 这个路径是数据卷在宿主机的路径

# 删除指定数据卷
docker volume rm 数据卷别名

# 删除未被使用的数据卷
docker volume prune

# 手动创建一个数据卷
docker volume create 数据卷别名 # 在docker run中-v mysql_data:/var/lib/mysql会自动创建这个数据卷,手动创建还多操作了一步,麻烦

__END__

三国小梦
文章作者:三国小梦
文章出处docker数据卷管理
作者签名:简单地活着, 肆意又精彩.
关于主题Hexo - Live For Code
版权声明:文章除特别声明外,均采用 BY-NC-SA 许可协议,转载请注明出处