数据卷管理
一、数据卷
和绑定挂载
的区别
1.1 数据卷(docker volume)
- 存储位置:
/var/lib/docker/volumes/
- 特点:
- 持久化:容器删除后数据仍保留。
- 高性能:适合频繁读写。
- 易于管理:通过 Docker 命令创建、备份和迁移。
- 适用场景:数据库、共享数据、持久化存储。
1.2 绑定挂载(docker run -v)
- 存储位置:主机指定的路径。
- 特点:
- 直接访问主机文件:容器可读写主机文件。
- 灵活性高:适合挂载任意主机目录或文件。
- 依赖主机权限:需确保主机路径权限正确。
- 适用场景:开发环境、挂载配置文件、直接访问主机文件。
二、docker volume 命令用法
命令 | 说明 |
---|---|
docker volume create <volume_name> | 创建一个数据卷。 |
docker volume ls | 列出所有数据卷。 |
docker volume inspect <volume_name> | 查看数据卷的详细信息。 |
docker run -v <volume_name>:<path> | 启动容器并挂载数据卷到指定路径。 |
docker volume rm <volume_name> | 删除指定的数据卷。 |
docker volume prune | 删除所有未使用的数据卷。 |
绑定挂载命令用法 | |
docker run -v <host_path>:<container_path> | 启动容器并挂载主机目录到容器路径。 |
三、 示例 创建数据卷
-
创建默认数据卷
# 指定名字
ubuntu@www.zxzsk.com:~$ docker volume create my_volume
my_volume -
创建匿名数据卷
# 不指定名字
ubuntu@www.zxzsk.com:~$ docker volume create
8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26 -
指定驱动类型
# local(默认)
docker volume create --driver local my_volume2 -
添加标签
# 创建一个数据卷并添加标签(如 env=prod)
docker volume create --label env=prod my_volume3 -
指定驱动选项
# 创建一个数据卷并指定驱动选项(如设置文件系统类型为 tmpfs)
ubuntu@www.zxzsk.com:~$ docker volume create --opt type=tmpfs --opt device=tmpfs my_volume4
my_volume4
四、示例 查看数据卷
查看 volume 目录
# 列出数据卷
root@www:/home/ubuntu# ls /var/lib/docker/volumes/
8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26/
backingFsBlockDev
metadata.db
my_volume/
my_volume2/
my_volume3/
my_volume4/
# 更详细
root@www:/home/ubuntu# tree /var/lib/docker/volumes/
/var/lib/docker/volumes/
├── 8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26
│ └── _data
├── backingFsBlockDev
├── metadata.db
├── my_volume
│ └── _data
│ ├── 50x.html
│ └── index.html
├── my_volume2
│ └── _data
├── my_volume3
│ └── _data
└── my_volume4
├── _data
└── opts.json
11 directories, 5 files
docker volume ls 列出数据卷
ubuntu@www.zxzsk.com:~$ docker volume ls
DRIVER VOLUME NAME
local 8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26
local my_volume
local my_volume2
local my_volume3
local my_volume4
docker volume inspect 查看数据卷详情
Details
ubuntu@www.zxzsk.com:~$ docker volume inspect my_volume
[
{
"CreatedAt": "2025-02-26T13:04:40Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my_volume/_data",
"Name": "my_volume",
"Options": null,
"Scope": "local"
}
]
ubuntu@www.zxzsk.com:~$ docker volume inspect 8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26
[
{
"CreatedAt": "2025-02-26T13:14:29Z",
"Driver": "local",
"Labels": {
"com.docker.volume.anonymous": ""
},
"Mountpoint": "/var/lib/docker/volumes/8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26/_data",
"Name": "8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26",
"Options": null,
"Scope": "local"
}
]
ubuntu@www.zxzsk.com:~$ docker volume inspect my_volume2
[
{
"CreatedAt": "2025-02-26T13:37:59Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my_volume2/_data",
"Name": "my_volume2",
"Options": null,
"Scope": "local"
}
]
ubuntu@www.zxzsk.com:~$ docker volume inspect my_volume3
[
{
"CreatedAt": "2025-02-26T13:39:51Z",
"Driver": "local",
"Labels": {
"env": "prod"
},
"Mountpoint": "/var/lib/docker/volumes/my_volume3/_data",
"Name": "my_volume3",
"Options": null,
"Scope": "local"
}
]
ubuntu@www.zxzsk.com:~$ docker volume inspect my_volume4
[
{
"CreatedAt": "2025-02-26T13:41:07Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my_volume4/_data",
"Name": "my_volume4",
"Options": {
"device": "tmpfs",
"type": "tmpfs"
},
"Scope": "local"
}
]
五、使用数据卷
挂载数据卷
# 准备数据卷
ubuntu@www.zxzsk.com:~$ docker volume ls
DRIVER VOLUME NAME
local my_volume
# 准备镜像
ubuntu@www.zxzsk.com:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest b52e0b094bc0 2 weeks ago 192MB
# 创建一个容器,挂载数 据卷
ubuntu@www.zxzsk.com:~$ docker run -d -P --name my-nginx -v my_volume:/usr/share/nginx/html/ nginx
11be6349947f20bb14b0adf66660b8bd599c54152d9d3c2ee54ea15efb04d5ea
# 运行状态
ubuntu@www.zxzsk.com:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11be6349947f nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:32771->80/tcp, :::32771->80/tcp my-nginx
六、查看数据卷使用情况
# 1.使用 docker ps 查看运行中的容器
ubuntu@www.zxzsk.com:~$ docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Mounts}}"
CONTAINER ID NAMES MOUNTS
9f7ad149cfef my-nginx4 my_volume
11be6349947f my-nginx my_volume
e230b1fd483f priceless_allen
0ea1a7d43fb9 cool_satoshi
5f9cfbdba6a0 musing_dijkstra
# 2.使用 docker inspect 查看容器详细信息
ubuntu@www.zxzsk.com:~$ docker inspect 11be6349947f --format '{{ json .Mounts }}' | jq
[
{
"Type": "volume",
"Name": "my_volume",
"Source": "/var/lib/docker/volumes/my_volume/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
]
ubuntu@www.zxzsk.com:~$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
my-nginx latest 0809827f6f41 29 hours ago 192MB 192MB 0B 1
my-hello-world 0.1 f7688e36afea 29 hours ago 7.83MB 7.834MB 0B 1
wcjiang/linux-command latest 2c54cbbfa8f0 35 hours ago 62.5MB 158.5kB 62.39MB 1
wcjiang/reference latest 78e924db5dd0 8 days ago 32.3MB 158.5kB 32.1MB 1
alpine latest aded1e1a5b37 12 days ago 7.83MB 7.834MB 0B 0
nginx latest b52e0b094bc0 2 weeks ago 192MB 192MB 0B 4
mysql latest 5568fddd4f66 4 weeks ago 797MB 0B 797MB 0
ubuntu 20.04 6013ae1a63c2 4 months ago 72.8MB 0B 72.81MB 0
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
c82fa0b0b10b nginx "/docker-entrypoint.…" 1 0B 5 minutes ago Exited (1) 5 minutes ago my-nginx5
9f7ad149cfef nginx "/docker-entrypoint.…" 1 1.09kB 7 minutes ago Up 7 minutes my-nginx4
c849b6cad020 nginx "/docker-entrypoint.…" 2 0B 11 minutes ago Exited (1) 11 minutes ago my-nginx2
11be6349947f nginx "/docker-entrypoint.…" 1 1.09kB 31 minutes ago Up 31 minutes my-nginx
e230b1fd483f wcjiang/linux-command "/busybox httpd -f -…" 0 0B 25 hours ago Up 7 hours priceless_allen
0ea1a7d43fb9 wcjiang/reference "/busybox httpd -f -…" 0 0B 26 hours ago Up 7 hours cool_satoshi
3a296b0470cb my-hello-world:0.1 "/bin/sh -c 'echo \"H…" 0 0B 26 hours ago Exited (0) 26 hours ago fervent_lewin
5f9cfbdba6a0 my-nginx "/docker-entrypoint.…" 0 1.09kB 26 hours ago Up 7 hours musing_dijkstra
Local Volumes space usage:
VOLUME NAME LINKS SIZE
my_volume2 0 0B
my_volume3 0 0B
my_volume 4 1.112kB
8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26 0 0B
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED