二、docker存储持久化-volume 2.1 创建一个卷 2.2 查看卷信息 2.3 查看卷挂载信息 2.4 查看卷的mount源 2.5 进入路径,修改主页文件 2.6 查看挂载类型 2.7 创建基于docker volume的container镜像 2.8 删除容器 2.9 删除 docker volume 2.10 重新使用 volume容器镜像部署容器 2.11 只读挂载 2.11.1 先创建volume卷 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] #
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/291614/viewspace-3048847/ ,如需转载,请注明出处,否则将追究法律责任。