ITPub博客

首页 > 云计算 > Docker/K8 > 16 掌握Docker存储精髓:Volume创建、管理与应用全攻略

16 掌握Docker存储精髓:Volume创建、管理与应用全攻略

原创 Docker/K8 作者:shuchaoyang 时间:2024-11-14 22:21:15 0 删除 编辑

二、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卷进行只读挂载

二、docker存储持久化-volume

  1. 卷(volume)完全由docker管理,是将特定目录挂载给容器;

  2. 使用卷(volume)时,会在主机上的docker存储目录中创建一个新目录,docker会管理该目录的内容;

  3. 卷(volume)的内容存在于容器的生命周期之外:删除容器后,docker数据卷仍然存在;

  4. 挂载卷(volume)时,不需要指定mount源,指定mount point即可;

  5. docker会在/var/lib/docker/volumes路径下为每个卷(volume)生成一个目录,作为mount源;

  6. 若mount point指向容器中的已有目录,则该目录下的数据会被copy到卷(volume)中;

  7. 7.若mount point指向容器中的空目录,则会自动创建所需目录;

  8. 若启动挂载尚不存在的卷的容器,docker会为自动创建卷;

  9. 卷(volume)在使用时,可通过ro参数将容器对卷(volume)的权限设置为只读。

可通过-v将卷(volume)挂载给一个容器。 -v格式: <host path> : <container path>

2.1 创建一个卷

创建一个卷,挂载给一个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 ~] #

2.2 查看卷信息

使用docker volume ls命令查看卷信息。

[root@docker ~]# docker volume ls

示例:

[root@docker ~]
# docker volume ls

DRIVER    VOLUME NAME
local     5fc6dbabdecad45f166b22f43dbf5d84b67f74ffaf0b5bb9f6cc262d9f3e2e34
[root@docker ~] #

2.3 查看卷挂载信息

使用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 ~] #

2.4 查看卷的mount源

在/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 ~] #

2.5 进入路径,修改主页文件

进入/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] #

2.6 查看挂载类型

查看"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] #

2.7 创建基于docker volume的container镜像

[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] #

2.8 删除容器

删除容器后,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] #

2.9 删除 docker volume

[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] #

2.10 重新使用 volume容器镜像部署容器

[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] #

修改的文件并没有封装到镜像当中

2.11 只读挂载

2.11.1 先创建volume卷
[root@docker ~]# docker volume create web01-vol

示例:

[root@docker ~]
# docker volume create web01-vol

web01-vol
[root@docker ~] #
2.11.2 对volume卷进行只读挂载
[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] #

原文链接: https://mp.weixin.qq.com/s?__biz=MzkxNzI1OTE3Mw==&mid=2247492667&idx=1&sn=35a1a4a8dcff71ea2a3d8735d7dba3ec&chksm=c141f2f1f6367be7641efc56e0894198afa3ace1525fa1b28085775c0f4c08f4cc84aa43d33f&token=1641304794&lang=zh_CN#rd

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片



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

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303429