Docker容器技术
Docker基础概念
Docker安装配置
通过docker registry搭建私有仓库
Dockerfile编写学习
数据卷管理
Docker 镜像
Docker容器管理
daemon.json配置示例
Dcocker网络互联
Docker部署nextcloud网盘
Watchtower-容器的自动升级
想要轻松上手Docker?Portainer帮你实现零基础快速部署!
Nextcloud搭建
Docker搭建Mrdoc
Mrdoc迁移记录
Docker部署wordpress博客
Docker部署个人密码管理平台bitwarden
Docker-compose安装配置
Docker-compose搭建小说阅读器
Docker搭建青龙面板
Docker搭建自己的导航页dashy
uptime-kuma监控面板部署
容器搭建Nas-tool及相关套件
本文档使用 MrDoc 发布
-
+
首页
数据卷管理
在Docker中,数据卷(Volume)是一个特殊的目录,它可以在宿主机和容器之间共享和重用数据。数据卷可以持久化存储数据,并且它的生命周期独立于容器,即使容器被删除,数据卷仍然存在。 ## 数据卷概念 容器的数据默认在容器删除后会被删除,如果对于像mysql、nginx等有数据持久性保存需求的场景可能会受影响,因此需要通过docker的数据卷功能提供数据持久性。 几个概念: - 匿名卷 通过在Dockerfile文件中指定`VOLUME指令`指定特定文件夹,会在docker默认文件夹下面生成一个对应的目录,在容器被删除后不会同时删除,可以保留数据,默认在/var/lib/docker/volumes下面。 - 数据卷 和匿名卷类似,在`docker run`指令允许时指定特定目录或文件作为数据卷,使用`-v`参数设置,可以设置多个。 ```linux # 下面示例通过-v添加两个数据卷/etc/nginx /usr/share/nginx docker run -d --name nginx-test -v /etc/nginx/ -v /usr/share/nginx/ nginx:latest # 可以通过docker volume ls 查看数据卷 local 22319ad2530b551601db046bcc8e07240b262fc04f1f0551bf96bd9e40c9d66f local 322860276fceec7d895f2732d37ac49c7e7c9c15c3e6772e0a69c338819d1dd4 # 通过docker inspect 查看指定的数据卷 docker inspect 22319ad2530b551601db046bcc8e07240b262fc04f1f0551bf96bd9e40c9d66f [ { "CreatedAt": "2022-12-22T01:57:42-05:00", "Driver": "local", "Labels": null, "Mountpoint": "/keli/docker/volumes/22319ad2530b551601db046bcc8e07240b262fc04f1f0551bf96bd9e40c9d66f/_data", "Name": "22319ad2530b551601db046bcc8e07240b262fc04f1f0551bf96bd9e40c9d66f", "Options": null, "Scope": "local" } ] # 也可以通过docker inspect 容器名称查看容器的详细详细,里面的mount选项里面有对应的信息。在数据卷的数据会同步到容器内部,可以用于数据测试以及一些持续写入的情况。 ``` 上面生成的文件夹是一大串的名称,我们可以在创建容器时指定数据卷的名称。 ``` # 可以在使用-v 参数自定义名称, -v 数据卷名称:容器目录 docker run -d --name nginx-volume1 -v config_dir:/etc/nginx/ -v front_dir:/usr/share/nginx/ nginx:latest # 查看卷 [root@localhost volumes]# docker volume ls DRIVER VOLUME NAME local 22319ad2530b551601db046bcc8e07240b262fc04f1f0551bf96bd9e40c9d66f local 322860276fceec7d895f2732d37ac49c7e7c9c15c3e6772e0a69c338819d1dd4 local config_dir local front_dir ``` 数据卷在容器被删除时不会自动删除,需要在docker rm 容器添加 -v参数 ``` # 使用-v参数在删除容器时同时删除匿名数据卷 docker rm nginx -v # 通过docker volume rm 数据卷名称删除 docker volume rm front_dir # 通过docker volume prune删除无用数据卷,没有被使用的数据卷会删除,常用于docker清理 docker volume prune ``` 在删除数据卷需要非常谨慎,毕竟数据无价。对于需要保存数据的可以将本地目录挂载到容器里进行数据持久化,官方建议是不在容器内部存储层操作文件内容,只允许必要程序,实现轻量化和可扩展性。 ## 本地目录挂载 对于需要主机和容器内部数据实现同步可以将目录进行挂载。也是在创建容器时通过`-v`参数挂载本地目录对应容器内目录。这个好处是可以自定义目录,明确挂载路径。 ```linux # 通过-v挂载目录 docker run -d -p 80:80 --name nginx-test -v /keli/nginx_config:/etc/nginx/ -v nginx_html:/usr/share/nginx/ nginx:latest docker logs 容器名称 ``` 实践情况是对于一些静态资源或者原来是空的目录挂载到本地目录。会以宿主机目录为主进行同步似乎。 ## 数据卷容器 就是将一个容器专门用于数据卷,供其他容器使用数据卷。 ```linux # 创建数据卷容器data_volumes,将容器内的/mnt目录挂载,如果目录不存在会自动创建,由于不是挂载本地目录因此数据卷在/var/lib/docker/volumes/xxx/_data下面 docker run -itd --name data_volumes -v /mnt centos:latest # 创建另外一个容器test01,使用--volumes-from 数据卷容器名称来挂载,然后在子容器的/mnt就会和数据卷容器同步 docker run -itd --name test01 --volumes-from data_volumes centos:latest # 通过挂载本地目录到容器内实现宿主机、数据卷容器、子容器三方同步,如果没有该目录会自动创建 docker run -itd --name data_volumes -v /keli/docker_volume/:/docker_volume centos:latest # 子容器 docker run -itd --name test01 --volumes-from data_volumes centos:latest ``` 通过数据卷容器可以让多个容器进行同步和挂载,对于一些情况下非常有用。 总结:如果没有配置目录映射和指定数据卷会在默认目录下存在一个容器的目录,可以通过映射本地目录,或者先创建指定名称的数据卷挂载到容器上,方便数据的查找,也可以通过数据卷容器统一提供挂载存储。
Chuck
2023年12月22日 17:48
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码