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 目录下
相关推荐
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
tntlbb3 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Gabriel_liao4 小时前
Docker安装Neo4j
docker·容器·neo4j
豆豆豆豆变7 小时前
Docker轻量级可视化工具Portainer
docker·容器·自动化运维
花晓木7 小时前
k8s etcd 数据损坏处理方式
容器·kubernetes·etcd
运维&陈同学7 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
花晓木7 小时前
k8s备份 ETCD , 使用velero工具进行备份
容器·kubernetes·etcd
大熊程序猿7 小时前
xxl-job docker 安装
运维·docker·容器
shelby_loo7 小时前
使用 Docker 在 Ubuntu 下部署 Cloudflared Tunnel 服务器
服务器·ubuntu·docker
咏颜8 小时前
Ubuntu离线安装Docker容器
linux·运维·服务器·经验分享·ubuntu·docker