Docker 数据卷

1、什么是数据卷

通过镜像创建一个容器。容器一旦被销毁,则容器内的数据将一并被删除。但有些情况下,通过服务器上传的图片出会丢失。容器中的数据不是持久化状态的。这个时候可以通过数据卷来解决这个问题。

数据卷是一个可供一个或多个容器使用的特殊目录 。数据卷的特点是:1、数据卷可以在容器之间共享和重用。2、对数据卷的修改会立马生效。3、对数据卷的更新不会影响镜像。4、数据卷默认会一直存在即使容器被删除

通俗一点而言,数据卷相当于硬盘,可以保存服务器的数据,即是服务器关闭了,数据依然不会丢失。

2、为什么需要数据卷

这得从 docker 容器的文件系统说起。出于效率等一系列原因,docker 容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:1、不能在宿主机上很方便地访问容器中的文件2、无法在多个容器之间共享数据3、当容器删除时,容器中产生的数据将丢失。

所以引入数据卷的目的就是为了解决上诉的问题,实现多个容器共享数据,保存数据、方便宿主机访问容器中的数据。数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker文件系统的形式存在于宿主机中。

数据卷的最大特定是:其生存周期独立于容器的生存周期

3、使用场景

1、在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载(引用/指向的意思)同一个数据卷,从而共享数据卷中的数据。

2、当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题。

3、当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。

4、当你需要把容器数据在不同的宿主机之间备份恢复迁移时,数据卷是很好的选择。

4、相关命令

创建数据卷命令如下:

bash 复制代码
# 创建数据卷之后,默认会存放到目录: /var/lib/docker/volume/数据卷名称/_data目录下

docker volume create 数据卷名称

查看数据卷命令如下:

bash 复制代码
# 查看数据卷
docker volume inspect 数据卷名称

# 查看全部数据卷信息
docker volume ls

删除数据卷命令如下:

bash 复制代码
# 删除数据卷
docker volume rm 数据卷名称

5、应用数据卷:

当你映射(意思就是这个容器的数据存储在这个数据卷里面 )数据卷时,如果数据卷不存在,Docker会帮你自动创建,即将容器内的某个文件夹挂载到宿主机的指定文件夹中。命令如下:

bash 复制代码
# 如果没有这个数据卷名称,docker会给你自动创建

docker run -v 数据卷名称:宿主机的路径 镜像ID

eg:docker run -v xhf:/var/lib/docker/volumes tomcat:8

# 这种 volume 是在创建容器时从宿主机中挂载的,无论对容器进行任何操作都不会导致其在宿主机中被删除,如果不需要这些文件,只能手动删除。

我们可以发现,我们上一节是将数据卷删除了的,执行完上面的方法之后,数据卷又被创建出来了,如下所示:

接下来我们执行 eg 里面的命令,然后使用 cp命令,向被数据卷指定的容器文件夹中放置文件,文件也会同步到数据卷中去,如下所示:

bash 复制代码
# 直接指定一个路径作为数据卷的存储位置

docker run -v 路径:容器内部的路径 镜像ID

eg:docker run --rm -d --name tomcat-8081 -p 8081:8080 -v /usr/local/docker/xhf_home/:/usr/local/tomcat/webapps/xhf_home tomcat:8

# -v 数据卷参数

# 将宿主机 /usr/local/docker/xhf_home/ 文件内的内容信息 挂载在容器 /usr/local/tomcat/webapps/xhf_home 目录下
相关推荐
全能全知者21 分钟前
docker快速安装与配置mongoDB
mongodb·docker·容器
阿尔帕兹2 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
ZHOU西口4 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
想进大厂的小王6 小时前
Spring-cloud 微服务 服务注册_服务发现-Eureka
微服务·eureka·服务发现
景天科技苑6 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge7 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇7 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试9 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!15 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
追风林16 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker