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 目录下
相关推荐
Why not try?!1 小时前
Centos7 中 Docker运行配置Apache
运维·docker·容器
hnlucky1 小时前
如何彻底清空docker里面不使用的容器?
运维·docker·容器
帷幄庸者2 小时前
CentOS 上配置 Docker 使用 NVIDIA GPU
linux·docker·centos
有梦想的攻城狮3 小时前
mac本地docker镜像上传指定虚拟机
macos·docker·eureka
lichuangcsdn4 小时前
【springcloud学习(dalston.sr1)】Eureka 客户端服务注册(含源代码)(四)
学习·spring cloud·eureka
青春不流名6 小时前
安装nerdctl和buildkitd脚本命令
容器
项目題供诗7 小时前
黑马k8s(九)
云原生·容器·kubernetes
IP管家9 小时前
企业级IP代理解决方案:负载均衡与API接口集成实践
服务器·网络·数据库·网络协议·tcp/ip·容器·负载均衡
宋康9 小时前
Docker 常用命令
docker·容器·eureka
孤的心了不冷10 小时前
【Linux】Linux安装并配置MongoDB
linux·运维·mongodb·容器