跳到主要内容

数据卷管理

一、数据卷绑定挂载的区别

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>启动容器并挂载主机目录到容器路径。

三、 示例 创建数据卷

  1. 创建默认数据卷

    # 指定名字
    ubuntu@www.zxzsk.com:~$ docker volume create my_volume
    my_volume
  2. 创建匿名数据卷

    # 不指定名字
    ubuntu@www.zxzsk.com:~$ docker volume create
    8fc4a7d5d333e2addff8d6c859064b93daf9715d4352d9b03837ea6389d93f26
  3. 指定驱动类型

    # local(默认)
    docker volume create --driver local my_volume2
  4. 添加标签

    # 创建一个数据卷并添加标签(如 env=prod)
    docker volume create --label env=prod my_volume3
  5. 指定驱动选项

    # 创建一个数据卷并指定驱动选项(如设置文件系统类型为 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