容器数据卷
1、容器数据卷概念
容器数据卷是一个可供一个或多个容器使用的特殊目录或文件,它能够实现数据的持久化和共享。数据卷由Docker挂载到容器上,但并不属于容器的联合文件系统,因此可以绕过Union File System的限制。数据卷的设计目的就是为了数据的持久化,它完全独立于容器的生命周期,这意味着即使容器被删除,Docker也不会删除其挂载的数据卷。
数据卷有三种挂载方式,包括Volumes、Bind mounts和tmpfs mounts。其中,Volumes是Docker管理的数据卷,存储在Docker主机文件系统的一部分中,是Docker中持久存储数据的推荐方法。Bind mounts则可以绑定挂载主机系统上的任意位置,包括重要的系统文件或目录,这种方式的灵活性较高,但需要注意安全性问题。而tmpfs mounts则是临时挂载,数据只存储在主机系统的内存中,不会写入主机系统的文件系统。
通过容器数据卷,我们可以实现容器数据的持久化、客户端和容器间的数据交换,以及容器间的数据共享。在配置数据卷时,我们需要指定目录的绝对路径,如果目录不存在,Docker会自动创建。此外,我们还可以使用数据卷容器来让其他容器继承自该容器的数据卷,从而实现数据共享。
总的来说,容器数据卷是Docker容器中一个非常重要的概念,它解决了容器数据的持久化和共享问题,提高了容器的灵活性和可用性。
2、数据卷挂载
1、在命令行挂载数据
- 在docker create命令或docker run 命令中,用-v为容器增加一个数据卷
[root@wangliukun ~]# docker run -it --name volume -v /web/app centos
[root@f04b8789d743 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var web
[root@f04b8789d743 /]# cd web/
[root@f04b8789d743 web]# ls
app
[root@f04b8789d743 app]# exit
exit
[root@wangliukun ~]#
以上实例,用docker run 运行容器,用 -v 参数为容器添加数据卷
- 查看挂载信息
[root@wangliukun ~]# docker inspect volume
。。。。。。。。。。。。。。。
"Mounts": [
{
"Type": "volume",
"Name": "42cf01aa1d964763031a6a54ac84dd905300775b15e89b0ccf0c6fabd4e79cdc",
"Source": "/var/lib/docker/volumes/42cf01aa1d964763031a6a54ac84dd905300775b15e89b0ccf0c6fabd4e79cdc/_data",
"Destination": "/web/app",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
。。。。。。。。。。。。。。。
[root@wangliukun ~]#
可以看到,宿主机已经在/var/lib/docker/volumes/下自动生成挂载目录
- 手动指定宿主机挂载目录
[root@wangliukun ~]# docker run -it -d --name test02 -v /webapp:/app nginx
7341bc822d8262a7be53647b32fe392556c443c462d8e1dd687b901807f14262
命名了一个test01 的centos容器,并挂载数据卷
- 查看状态
##centos容器正在运行
[root@wangliukun ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7341bc822d82 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp test02
[root@wangliukun ~]# docker inspect test02
。。。。。。。。。。。。。。。。。。。。
"Mounts": [
{
"Type": "bind",
"Source": "/webapp",
"Destination": "/app",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
。。。。。。。。。。。。。。。。。。。
[root@wangliukun ~]#
- 观察数据卷共享机制,会在宿主机与容器之间切换,建议开启两个终端
[root@wangliukun ~]# docker run -it --name test06 -v /web/webapp:/app centos
[root@c77cc5e3e423 /]#
以上,将容器挂载至/web/webapp
- 查看宿主机与容器的根目录下文件
[root@c77cc5e3e423 /]# ls
app bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@c77cc5e3e423 /]# exit
[root@wangliukun /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var web webapp
[root@wangliukun /]#
[root@wangliukun /]# cd /web/webapp/
[root@wangliukun webapp]# ls
[root@wangliukun webapp]#
可看到多出个app,宿主机新建了个web目录,/web/webapp里面没有任何文件
- 宿主机/web创建文件
[root@wangliukun webapp]# touch a.txt b.txt
[root@wangliukun webapp]# ll
总用量 0
-rw-r--r--. 1 root root 0 4月 10 12:06 a.txt
-rw-r--r--. 1 root root 0 4月 10 12:06 b.txt
##进入容器
[root@wangliukun webapp]# docker attach c77
[root@c77cc5e3e423 /]# ls
app bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@c77cc5e3e423 /]# cd app/
#查看/app下是否也创建了a.txt,b.txt
[root@c77cc5e3e423 app]# ls
a.txt b.txt
[root@c77cc5e3e423 app]#
#返回容器查看挂载目录下生成a.txt和b.txt
- 容器中创建文件,查看宿主机
[root@c77cc5e3e423 app]# touch c.txt
[root@c77cc5e3e423 app]# exit
exit
[root@wangliukun webapp]# ll
总用量 0
-rw-r--r--. 1 root root 0 4月 10 12:06 a.txt
-rw-r--r--. 1 root root 0 4月 10 12:06 b.txt
-rw-r--r--. 1 root root 0 4月 10 12:14 c??.txt
[root@wangliukun webapp]#
可查到,说明容器与宿主机共享文件
- 设置权限(只读):
##ro(只读)
[root@wangliukun webapp]# docker run -it --name volume1 -v /src/test:/webapp:ro centos /bin/bash
[root@f6c174ee0080 /]#
-v /src/test:/webapp:ro
将数据卷权限设置为ro(只读)
- 查看挂在情况:
[root@wangliukun webapp]# docker inspect volume1
...
"Mounts": [
{
"Type": "bind",
"Source": "/src/test",
"Destination": "/webapp",
"Mode": "ro",
"RW": false,
"Propagation": "rprivate"
}
],
...
2、通过DOckerfile 挂载数据卷
用户创建镜像时,通常会在Dockerfile文件中加上 VOLUME[/date]来创建含有数据卷的镜像,并使用该镜像创建包含数据卷的容器。
Dockerfile可以创建多个数据卷,与使用docker run命令创建数据卷不同,Dockerfile中的数据卷不能映射到已经存在的本地目录。在启动容器时,才会创建Dockerfile中指定的数据卷,并且以Dockerfile中指定的名称命名。运行同样镜像的容器创建的数据卷是不一样的(可以看到不同容器的数据卷地址也是不一样的)。当容器中的数据卷地址不一样时,容器之间就无法共享数据了。
下面使用Dockerfile中的VOLUME选项来指定挂载数据卷,首先创建Dockerfile并添加内容。
[root@wangliukun ~]# vi Dockerfile
[root@wangliukun ~]# cat Dockerfile
FROM centos
VOLUME /root/data
VOLUME /work
VOLUME test
[root@wangliukun ~]#
以上示例创建了一个Dockerfile文件并添加了内容,即挂载三个数据卷。
- 创建新镜像:
[root@wangliukun ~]# docker build -t volume3 .
[+] Building 0.7s (5/5) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 152B 0.0s
=> [internal] load metadata for docker.io/library/centos:latest 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [1/1] FROM docker.io/library/centos:latest 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:e8d2708d2fd5280ba379f892b8b214279a2533b02f5144f5f6ac344bcc902e64 0.0s
=> => naming to docker.io/library/volume3 0.0s
[root@wangliukun ~]#
以上示例中,镜像已经构建完成,并且执行了挂载三个数据卷的命令。
- 下面使用构建完成的镜像运行容器,并查看其挂载信息,示例代码如下:
[root@wangliukun ~]# docker run -it volume3
[root@5f1113077dcb /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test tmp usr var work
[root@5f1113077dcb /]#
- 查看运行情况:
[root@wangliukun ~]# docker inspect 5f
...
"Mounts": [
{
"Type": "volume",
"Name": "a144dd3f4d6ace771a0c102fa7c7e977420f38b505f7924edffb711ecb3ab4d3",
"Source": "/var/lib/docker/volumes/a144dd3f4d6ace771a0c102fa7c7e977420f38b505f7924edffb711ecb3ab4d3/_data",
"Destination": "test",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "69383c3709d5752f4e61062a38d115d297f43c51c43d38d1ebe58bf6b2fdc1fe",
"Source": "/var/lib/docker/volumes/69383c3709d5752f4e61062a38d115d297f43c51c43d38d1ebe58bf6b2fdc1fe/_data",
"Destination": "/root/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "491d3ba6c2ab471b4699566b257a1c8bccd58870aa21b57613ef5fae80ddc31d",
"Source": "/var/lib/docker/volumes/491d3ba6c2ab471b4699566b257a1c8bccd58870aa21b57613ef5fae80ddc31d/_data",
"Destination": "/work",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
...
从以上示例中可以看出,该容器挂载了三个数据卷,容器内的目录为Dockerfile中指定的目录,宿主机中数据卷的位置在/var/lib/docker/volumes/
下,并且数据卷的地址是随机生成的。
如此一来,就实现了通过Dockerfile创建镜像,运行容器时会自动挂载数据卷。
3、数据卷容器
运行容器时宿主机会随机生成挂载目录,无法保持目录地址一致,所以无法实现容器间的数据共享。数据卷容器可以有效地解决这个问题:将已命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器叫作数据卷容器。数据卷容器挂载一个宿主机目录,其他容器连接数据卷容器来实现数据的共享。
- 下面启动一个名为 volume-container的容器,此容器包含两个数据卷/volumel和/volume2(这两个数据卷目录在容器中,运行容器时会自动创建),示例代码如下:
[root@wangliukun ~]# docker run -it --name volume-container -v /volume1 -v /volume2 centos
[root@89d7d9bde4a3 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@89d7d9bde4a3 /]#
以上示例中,容器volume-container已经创建完成,数据卷也挂载完成。
- 下面使用Ctrl+P+Q组合键退出当前容器终端,查看挂载信息并在宿主机中为数据卷添加文件,示例代码如下:
[root@wangliukun ~]# docker inspect volume-container | grep volume
"Name": "/volume-container",
"Type": "volume",
"Source": "/var/lib/docker/volumes/da28a04098c4588bebe99e078107624a4cfb47198b34accedb76580967b29476/_data",
"Destination": "/volume2",
"Type": "volume",
"Source": "/var/lib/docker/volumes/f84b1314dde6b4361a7ed626c89e88aa617c579bf913ff4740a65f97bf7acd7c/_data",
"Destination": "/volume1",
"/volume1": {},
"/volume2": {}
[root@wangliukun ~]#
##查看挂在信息
[root@wangliukun ~]# cd /var/lib/docker/volumes/f84b1314dde6b4361a7ed626c89e88aa617c579bf913ff4740a65f97bf7acd7c/_data
[root@wangliukun _data]# ls
[root@wangliukun _data]# echo hello container1 >a.txt
[root@wangliukun _data]# cd /var/lib/docker/volumes/da28a04098c4588bebe99e078107624a4cfb47198b34accedb76580967b29476/_data
[root@wangliukun _data]# ls
[root@wangliukun _data]# echo hello container2 >b.txt
[root@wangliukun _data]#
以上示例在宿主机中分别为两个数据卷添加文件及文件内容
- 下面创建容器 testl-container,用
--volumes-from
,参数挂载容器 volume-container中的数据卷,示例代码如下:
[root@wangliukun _data]# docker run -it --name test1-container --volumes-from volume-container centos
[root@7e59a8eb768f /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@7e59a8eb768f /]# cat /volume1/a.txt
hello container1
[root@7e59a8eb768f /]# cat /volume2/b.txt
hello container2
[root@7e59a8eb768f /]#
- 从以上示例中可以看出,两个容器实现了数据共享。下面将初始数据卷容器删除,观察数据卷还能否正常工作,示例代码如下:
[root@wangliukun _data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e59a8eb768f centos "/bin/bash" About a minute ago Exited (127) 5 seconds ago test1-container
89d7d9bde4a3 centos "/bin/bash" 10 minutes ago Up 9 minutes volume-container
5f1113077dcb volume3 "/bin/bash" 17 minutes ago Exited (0) 15 minutes ago epic_cohen
...
[root@wangliukun _data]# docker stop volume-container
volume-container
[root@wangliukun _data]# docker rm volume-container
volume-container
[root@wangliukun _data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e59a8eb768f centos "/bin/bash" 2 minutes ago Exited (127) About a minute ago test1-container
5f1113077dcb volume3 "/bin/bash" 18 minutes ago Exited (0) 16 minutes ago epic_cohen
...
[root@wangliukun _data]#
[root@wangliukun _data]# docker run -it --name test2-container --volumes-from test1-container centos
[root@063c97b4cfb5 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume1 volume2
[root@063c97b4cfb5 /]# cat volume1/a.txt
hello container1
[root@063c97b4cfb5 /]# cat volume2/b.txt
hello container2
[root@063c97b4cfb5 /]#
从以上示例中可以看到,即使删除了初始的数据卷容器volume-container或其他容器,只要有容器在使用该数据卷,里面的数据就不会丢失。
- 下面删除所有容器,再观察数据卷,示例代码如下:
##删除所有容器
[root@wangliukun _data]# docker rm `docker ps -a | grep Exited|awk '{print $1}'`
063c97b4cfb5
7e59a8eb768f
5f1113077dcb
f6c174ee0080
c77cc5e3e423
4faf60ef1598
d795f7db4abe
afaf2f3f0e47
854d9417caf3
7341bc822d82
13ad55c584f6
f04b8789d743
793f1efe4205
b68b20c1f3ae
438fd7682290
0155dfd35d06
8f822fa5baa2
4077af031274
c0a2c91499b5
76f3ed86ae8a
[root@wangliukun _data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9c544db8766 centos "centos" 7 days ago Created upbeat_davinci
[root@wangliukun _data]# docker rm a9c544db8766
a9c544db8766
[root@wangliukun _data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
##查看数据
[root@wangliukun _data]#
[root@wangliukun _data]# cd /var/lib/docker/volumes/da28a04098c4588bebe99e078107624a4cfb47198b34accedb76580967b29476/_data
[root@wangliukun _data]# ls
b.txt
[root@wangliukun _data]# cat b.txt
hello container2
[root@wangliukun _data]#
##宿主机数据还在
4、备份数据卷
企业中,业务数据不容有失。人们通常会对数据进行一次备份或多次备份,以保证数据的安全性。
- 下面创建一个名为data- volume的 CentOS容器,准备对其挂载的两个数据卷/var/volume1和/var/volume2进行备份操作。示例代码如下:
[root@wangliukun _data]# docker run -it --name data-volume -v /var/volume1 -v /var/volume2 centos
[root@f81fcd84a688 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@f81fcd84a688 /]# cd /var/
[root@f81fcd84a688 var]# ls
adm cache crash db empty ftp games gopher kerberos lib local lock log mail nis opt preserve run spool tmp volume1 volume2 yp
[root@f81fcd84a688 var]#
以上示例中,容器已经创建完成,数据卷也成功挂载。
- 下面在容器挂载目录中创建文件并添加内容,示例代码如下:
[root@f81fcd84a688 var]# echo hello container1 >/var/volume1/a.txt
[root@f81fcd84a688 var]# echo hello container2 >/var/volume2/b.txt
[root@f81fcd84a688 var]# cat volume1/a.txt
hello container1
[root@f81fcd84a688 var]# cat volume2/b.txt
hello container2
[root@f81fcd84a688 var]#
以上成功创建文件并添加内容
简而言之,备份数据卷就是使用 -volumes-from
参数来创建一个挂载数据卷的容器,从宿主机挂载要存放备份数据的目录到容器的备份目录,并备份数据卷中的数据。完成后使用-rm
参数删除容器。此对备份数据已经保存在当前的目录下。示例代码如下:
[root@wangliukun ~]# docker run --rm --volumes-from data-volume -v /root/back:/backup centos tar cvf /backup/backup1.tar /var/volume1
#--rm 该容器运行完自动删除
#挂载宿主机/root/back到容器/backup
##创建,运行
/var/volume1/
/var/volume1/a.txt
tar: Removing leading `/' from member names
#执行tar 备份数据,停止删除容器
[root@wangliukun ~]#
##查看备份
[root@wangliukun ~]# cd /root/back/
[root@wangliukun back]# ll
总用量 12
-rw-r--r--. 1 root root 10240 4月 10 15:13 backup1.tar
[root@wangliukun back]#
##将volume2备份
[root@wangliukun back]# docker run --rm --volumes-from data-volume -v /root/back:/backup centos tar cvf /backup/backup2.tar /var/volume2
/var/volume2/
/var/volume2/b.txt
tar: Removing leading `/' from member names
[root@wangliukun back]# ls /root/back/
backup1.tar backup2.tar
[root@wangliukun back]#
5、数据卷恢复与迁移
1、恢复:
- 上一节中在宿主机有备份数据backup1.tar,下面模拟数据丢失后恢复
[root@wangliukun ~]# cd /root/back/
[root@wangliukun back]# ll
总用量 24
-rw-r--r--. 1 root root 10240 4月 10 15:13 backup1.tar
-rw-r--r--. 1 root root 10240 4月 10 15:28 backup2.tar
[root@wangliukun back]#
##已经做好的数据备份
[root@wangliukun back]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f81fcd84a688 centos "/bin/bash" 39 minutes ago Exited (0) 22 minutes ago data-volume
##进入数据卷容器
[root@wangliukun back]# docker attach data-volume
You cannot attach to a stopped container, start it first
[root@wangliukun back]# docker start f8
f8
[root@wangliukun back]# docker attach f8
[root@f81fcd84a688 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@f81fcd84a688 /]# cd var/
[root@f81fcd84a688 var]# ls
adm cache crash db empty ftp games gopher kerberos lib local lock log mail nis opt preserve run spool tmp volume1 volume2 yp
[root@f81fcd84a688 var]# ls volume1/a.txt
volume1/a.txt
[root@f81fcd84a688 var]# ls volume1
a.txt
[root@f81fcd84a688 var]# ls volume2
b.txt
[root@f81fcd84a688 var]# rm -rf /var/volume1/a.txt
[root@f81fcd84a688 var]# rm -rf /var/volume2/b.txt
[root@f81fcd84a688 var]#
以上删除了数据卷容器中的/var/volume1/a.txt 和/var/volume2/b.txt 。
- 恢复代码:
[root@wangliukun ~]# docker run --rm --volumes-from data-volume -v /root/back/:/back centos tar xvf ./back/backup2.tar -C /var/volume1/
var/volume2/
var/volume2/b.txt
[root@wangliukun ~]# docker run --rm --volumes-from data-volume -v /root/back/:/back centos tar xvf ./back/backup1.tar -C /var/volume1/
var/volume1/
var/volume1/a.txt
##查看
[root@wangliukun ~]# docker start f8
f8
[root@wangliukun ~]# docker attach f8
[root@f81fcd84a688 /]# ls /var/volume1
var
[root@f81fcd84a688 /]# ls /var/volume1/var/volume
volume1/ volume2/
[root@f81fcd84a688 /]# ls /var/volume1/var/volume
volume1/ volume2/
[root@f81fcd84a688 /]# ls /var/volume1/var/volume1/
a.txt
[root@f81fcd84a688 /]# ls /var/volume1/var/volume2/
b.txt
[root@f81fcd84a688 /]#
2、迁移:
迁移数据卷是将备份数据恢复到新容器中
- 新建容器并解压备份文件到新建容器:
[root@wangliukun ~]# docker run -it -v /var/volume1 -v /var/volume2 --name new-container centos /bin/bash
##新建容器,挂在要恢复的目录
[root@d72ab63f7926 /]# ls /var/volume1
[root@d72ab63f7926 /]# ls /var/volume2
[root@d72ab63f7926 /]#
以上新建了new-container,挂载在了/var/volume1和/var/volume2,但无数据
- 将备份迁移到新容器:
[root@wangliukun ~]# docker run -it --rm --volumes-from new-container -v /root/back/:/back centos tar xvf ./back/backup1.tar -C /var/volume1/
var/volume1/
var/volume1/a.txt
[root@wangliukun ~]# docker run -it --rm --volumes-from new-container -v /root/back/:/back centos tar xvf ./back/backup2.tar -C /var/volume2/
var/volume2/
var/volume2/b.txt
[root@wangliukun ~]#
[root@wangliukun ~]# docker attach d7
You cannot attach to a stopped container, start it first
[root@wangliukun ~]# docker start d7
d7
[root@wangliukun ~]# docker attach d7
[root@d72ab63f7926 /]# ls /var/volume1
var
[root@d72ab63f7926 /]# ls /var/volume2
var
[root@d72ab63f7926 /]# ls /var/volume1/var/volume1/a.txt
/var/volume1/var/volume1/a.txt
[root@d72ab63f7926 /]# ls /var/volume2/var/volume2/b.txt
/var/volume2/var/volume2/b.txt
[root@d72ab63f7926 /]#
从上例看出迁移数据成功。
6、管理数据卷
1、与容器关联
数据卷最大的优势是可以用来做持久化数据。它的生命周期是独立的,Docker
不会在容器被删除后自动删除数据卷,也不存在类似垃圾回收的机制来处理没有
被任何容器使用的数据卷。但难免会有无用的数据卷,用户可以通过在删除容器
的命令中添加参数,在删除容器的同时删除数据卷。
Docker数据卷可以通过命令与容器关联,删除容器时,数据卷也随之被删除。
docker rm-v
删除容器时添加-v参数会将数据卷一并删除。
docker run --rm
创建、运行容器时添加–rm参数,容器运行结束时容器与数据卷会被一并删除。
如果不对数据卷进行及时清理,/var/lib/docker/volumes/目录下就会产生许多残留目录。
但删除的数据卷是无法找回的,建议再三确认之后再执行操作。
2、命令管理
Docker中有专门的容器数据卷命令供用户管理容器数据卷。下面通过示例介绍容器数据卷命的一些参数。
docker volume create :创建数据卷
docker volume ls :列出数据卷
docker inspect <容器id或名字>:列出数据卷
docker volume rm <数据卷name>:删除一个或多个数据卷
docker volume prune:删除所有未被使用的数据卷
- create 创建
[root@wangliukun ~]# docker volume create test
test
[root@wangliukun ~]#
- ls 列出
[root@wangliukun ~]# docker volume ls
DRIVER VOLUME NAME
local 42cf01aa1d964763031a6a54ac84dd905300775b15e89b0ccf0c6fabd4e79cdc
local 42d71c5c011633f3c2c62e962bc2200d1b67ccc4ecb322a95d31fed1aa10f6cb
local 491d3ba6c2ab471b4699566b257a1c8bccd58870aa21b57613ef5fae80ddc31d
local 69383c3709d5752f4e61062a38d115d297f43c51c43d38d1ebe58bf6b2fdc1fe
local a144dd3f4d6ace771a0c102fa7c7e977420f38b505f7924edffb711ecb3ab4d3
local cc7c05a0f95d654f40791c1d0dfb4c0fd835c670f04926b4b2f0efc119ad6e0d
local da28a04098c4588bebe99e078107624a4cfb47198b34accedb76580967b29476
local f1e811634e97b9af4b9752659261880a789cfb12cb74e4f361820cd0b262bd44
local f5a550270ded85e26e880a9f008cccfa9b10bc0fe2f8237225babf8c9b8f5b6b
local f84b1314dde6b4361a7ed626c89e88aa617c579bf913ff4740a65f97bf7acd7c
local test
[root@wangliukun ~]#
- inspect 列出(显示一个或多个数据卷详细信息)
[root@wangliukun ~]# docker inspect test
[
{
"CreatedAt": "2024-04-10T16:11:31+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/test/_data",
"Name": "test",
"Options": null,
"Scope": "local"
}
]
[root@wangliukun ~]#
rm 删除(删除一个或多个)
#需要先终止并删除容器
docker stop <容器id或名字>
docker rm <容器id或名字>
#删除数据卷
docker volume rm <数据卷name>
[root@wangliukun ~]# docker volume rm test
test
[root@wangliukun ~]# docker volume ls
DRIVER VOLUME NAME
local 42cf01aa1d964763031a6a54ac84dd905300775b15e89b0ccf0c6fabd4e79cdc
local 42d71c5c011633f3c2c62e962bc2200d1b67ccc4ecb322a95d31fed1aa10f6cb
local 491d3ba6c2ab471b4699566b257a1c8bccd58870aa21b57613ef5fae80ddc31d
local 69383c3709d5752f4e61062a38d115d297f43c51c43d38d1ebe58bf6b2fdc1fe
local a144dd3f4d6ace771a0c102fa7c7e977420f38b505f7924edffb711ecb3ab4d3
local cc7c05a0f95d654f40791c1d0dfb4c0fd835c670f04926b4b2f0efc119ad6e0d
local da28a04098c4588bebe99e078107624a4cfb47198b34accedb76580967b29476
local f1e811634e97b9af4b9752659261880a789cfb12cb74e4f361820cd0b262bd44
local f5a550270ded85e26e880a9f008cccfa9b10bc0fe2f8237225babf8c9b8f5b6b
local f84b1314dde6b4361a7ed626c89e88aa617c579bf913ff4740a65f97bf7acd7c
[root@wangliukun ~]#
- prune 删除(删除所有未被使用的卷)
[root@wangliukun ~]# docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
42cf01aa1d964763031a6a54ac84dd905300775b15e89b0ccf0c6fabd4e79cdc
a144dd3f4d6ace771a0c102fa7c7e977420f38b505f7924edffb711ecb3ab4d3
491d3ba6c2ab471b4699566b257a1c8bccd58870aa21b57613ef5fae80ddc31d
69383c3709d5752f4e61062a38d115d297f43c51c43d38d1ebe58bf6b2fdc1fe
da28a04098c4588bebe99e078107624a4cfb47198b34accedb76580967b29476
f84b1314dde6b4361a7ed626c89e88aa617c579bf913ff4740a65f97bf7acd7c
Total reclaimed space: 34B
[root@wangliukun ~]#
上一章:Docker底层技术
下一章:Docker容器网络