7.2 docker存储持久化-volume7.2.1 创建一个卷7.2.2 查看卷信息7.2.3 查看卷挂载信息7.2.4 查看卷的mount源7.2.5 进入路径,修改主页文件7.2.6 查看挂载类型7.2.7 创建基于docker volume的container镜像7.2.8 删除容器7.2.9 删除 docker volume7.2.10 重新使用 volume容器镜像部署容器7.2.11 只读挂载7.2.11.1 先创建volume卷7.2.11.2 对volume卷进行只读挂载
卷(volume)完全由docker管理,是将特定目录挂载给容器;
使用卷(volume)时,会在主机上的docker存储目录中创建一个新目录,docker会管理该目录的内容;
卷(volume)的内容存在于容器的生命周期之外:删除容器后,docker数据卷仍然存在;
挂载卷(volume)时,不需要指定mount源,指定mount point即可;
docker会在/var/lib/docker/volumes路径下为每个卷(volume)生成一个目录,作为mount源;
若mount point指向容器中的已有目录,则该目录下的数据会被copy到卷(volume)中;
7.若mount point指向容器中的空目录,则会自动创建所需目录;
若启动挂载尚不存在的卷的容器,docker会为自动创建卷;
卷(volume)在使用时,可通过ro参数将容器对卷(volume)的权限设置为只读。
可通过-v将卷(volume)挂载给一个容器。-v格式:<host path>:<container path>
创建一个卷,挂载给一个httpd容器。
[root@docker ~]# docker run --name web01 -dit -p 8080:80 -v /usr/local/apache2/htdocs httpd:2.4
示例:
[root@docker ~]# ls /var/lib/docker/volumes
backingFsBlockDev metadata.db
[root@docker ~]#
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]#
[root@docker ~]# docker run --name web01 -dit -p 8080:80 -v /usr/local/apache2/htdocs httpd:2.4
de7c273addd22a4ebefa1b0acdf9fc8427f6d11428a58c9baf653ba7e8f5a788
[root@docker ~]#
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de7c273addd2 httpd:2.4 "httpd-foreground" 6 seconds ago Up 5 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01
[root@docker ~]#
使用docker volume ls命令查看卷信息。
[root@docker ~]# docker volume ls
示例:
[root@docker ~]# docker volume ls
DRIVER VOLUME NAME
local 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
[root@docker ~]#
使用docker volume inspect命令查看卷挂载信息。
[root@docker ~]# docker volume inspect 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
示例:
[root@docker ~]# docker volume inspect 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
[
{
"CreatedAt": "2024-09-08T19:11:43+08:00",
"Driver": "local",
"Labels": {
"com.docker.volume.anonymous": ""
},
"Mountpoint": "/var/lib/docker/volumes/5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34/_data",
"Name": "5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34",
"Options": null,
"Scope": "local"
}
]
[root@docker ~]#
在/var/lib/docker/volume下已自动生成一个带有volume name的文件夹作为mount源。
[root@docker ~]# ls -lha /var/lib/docker/volumes
示例:
[root@docker ~]# ls -lha /var/lib/docker/volumes
总用量 24K
drwx-----x. 3 root root 122 9月 8 19:11 .
drwx--x---. 12 root root 171 9月 8 08:04 ..
drwx-----x 3 root root 19 9月 8 19:11 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
brw------- 1 root root 253, 0 9月 8 08:04 backingFsBlockDev
-rw-------. 1 root root 32K 9月 8 19:11 metadata.db
[root@docker ~]#
进入/var/lib/docker/volumes/<volume>/_data修改主页文件。
[root@docker ~]# vi /var/lib/docker/volumes/5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34/_data/index.html
[root@docker _data]#
示例:
[root@docker ~]# cd /var/lib/docker/volumes/5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34/_data
[root@docker _data]#
[root@docker _data]# pwd
/var/lib/docker/volumes/5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34/_data
[root@docker _data]#
[root@docker _data]# ls
index.html
[root@docker _data]#
[root@docker _data]# vi index.html
<html><body><h1>It works! volume-container</h1></body></html>
[root@docker _data]#
[root@docker _data]# curl 127.0.0.1:8080
<html><body><h1>It works! volume-container</h1></body></html>
[root@docker _data]#
查看"Type": "volume"相关内容。
[root@docker _data]# docker inspect web01
示例:
[root@docker _data]# docker inspect web01
...
"Mounts": [
{
"Type": "volume",
"Name": "5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34",
"Source": "/var/lib/docker/volumes/5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34/_data",
"Destination": "/usr/local/apache2/htdocs",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
...
[root@docker _data]#
[root@docker _data]# docker commit web01 httpd_volume:1.0
示例:
[root@docker _data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd_superman 1.0 f0d394fd69d5 3 months ago 144MB
tomcat latest fb5657adc892 2 years ago 680MB
httpd 2.4 dabbfbe0c57b 2 years ago 144MB
httpd latest dabbfbe0c57b 2 years ago 144MB
alpine latest c059bfaa849c 2 years ago 5.59MB
[root@docker _data]#
[root@docker _data]# docker commit web01 httpd_volume:1.0
sha256:496faa1c65959306258b6c3a89e814a33632491644e63fbf47c80817fa87eb5f
[root@docker _data]#
[root@docker _data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd_volume 1.0 496faa1c6595 3 seconds ago 144MB
httpd_superman 1.0 f0d394fd69d5 3 months ago 144MB
tomcat latest fb5657adc892 2 years ago 680MB
httpd 2.4 dabbfbe0c57b 2 years ago 144MB
httpd latest dabbfbe0c57b 2 years ago 144MB
alpine latest c059bfaa849c 2 years ago 5.59MB
[root@docker _data]#
删除容器后,volume依旧存在,其数据可持久化保存。
[root@docker _data]# docker rm -f web01
[root@docker _data]# docker volume ls
示例:
[root@docker _data]# docker rm -f web01
web01
[root@docker _data]#
[root@docker _data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker _data]#
[root@docker _data]# docker volume ls
DRIVER VOLUME NAME
local 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
[root@docker _data]#
[root@docker _data]# docker volume rm 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
示例:
[root@docker _data]# docker volume ls
DRIVER VOLUME NAME
local 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
[root@docker _data]#
[root@docker _data]# docker volume rm 5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
[root@docker _data]#
[root@docker _data]# docker volume ls
DRIVER VOLUME NAME
[root@docker _data]#
[root@docker _data]# docker run -dit --name web01_volume -p 8080:80 httpd_volume:1.0
示例:
[root@docker _data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker _data]#
[root@docker _data]# docker run -dit --name web01_volume -p 8080:80 httpd_volume:1.0
a30efe4e8f57d9e1475098bba441e8d86afbda0ce613d6bc578a8890e6dac965
[root@docker _data]#
[root@docker _data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a30efe4e8f57 httpd_volume:1.0 "httpd-foreground" 7 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01_volume
[root@docker _data]#
[root@docker _data]# curl 127.0.0.1:8080
<html><body><h1>It works!</h1></body></html>
[root@docker _data]#
修改的文件并没有封装到镜像当中
[root@docker ~]# docker volume create web01-vol
示例:
[root@docker ~]# docker volume create web01-vol
web01-vol
[root@docker ~]#
[root@docker ~]# docker run --name web01 -dit -p 8080:80 -v web01-vol:/usr/local/apache2/htdocs:ro httpd:2.4
[root@docker ~]#
示例:
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a30efe4e8f57 httpd_volume:1.0 "httpd-foreground" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01_volume
[root@docker ~]#
[root@docker ~]# docker run --name web01 -dit -p 8081:80 -v web01-vol:/usr/local/apache2/htdocs:ro httpd:2.4
4566fb11b68bb4fc261fe66b86a76f5f435bb2ac0efcc99f0b8758c101e55f3c
[root@docker ~]#
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4566fb11b68b httpd:2.4 "httpd-foreground" 21 seconds ago Up 20 seconds 0.0.0.0:8081->80/tcp, :::8081->80/tcp web01
a30efe4e8f57 httpd_volume:1.0 "httpd-foreground" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01_volume
[root@docker ~]#
[root@docker ~]# docker exec -it web01 /bin/bash
root@4566fb11b68b:/usr/local/apache2#
root@4566fb11b68b:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
root@4566fb11b68b:/usr/local/apache2#
root@4566fb11b68b:/usr/local/apache2# cd htdocs/
root@4566fb11b68b:/usr/local/apache2/htdocs#
root@4566fb11b68b:/usr/local/apache2/htdocs# ls
index.html
root@4566fb11b68b:/usr/local/apache2/htdocs#
root@4566fb11b68b:/usr/local/apache2/htdocs# echo 123 >> index.html
bash: index.html: Read-only file system
root@4566fb11b68b:/usr/local/apache2/htdocs#
root@4566fb11b68b:/usr/local/apache2/htdocs# exit
exit
[root@docker ~]#
[root@docker ~]# cd /var/lib/docker/volumes/web01-vol/_data/
[root@docker _data]#
[root@docker _data]# ls
index.html
[root@docker _data]#
[root@docker _data]# echo "123" >> index.html
[root@docker _data]#
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!

原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。