docker从零开始入门(三)Docker数据卷的操作

160 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

Docker 数据卷

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

那有没有一种独立于容器、提供持久化并能服务于多个容器的东西呢?

什么是数据卷 数据卷 : 是一个可供一个或多个容器使用的特殊目录

特性:

· 数据卷可以在容器之间共享和重用

· 对数据卷的修改会立马生效

· 对数据卷的更新,不会影响镜像

· 数据卷默认会一直存在,即使容器被删除

image.png

为什么需要数据卷?

这得从 docker 容器的文件系统说起。出于效率等一系列原因,docker 容器的文件系统在宿主机上存在的方式很 复杂,这会带来下面几个问题:

· 不能在宿主机上很方便地访问容器中的文件。

· 无法在多个容器之间共享数据。

· 当容器删除时,容器中产生的数据将丢失

为了解决这些问题,docker 引入了数据卷(volume) 机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,这 个文件或文件夹以独立于 docker 文件系统的形式存在于宿主机中。

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

使用数据卷的最佳场景

· 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的 数据。

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

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

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

数据卷应用

应用数据卷

当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建

docker run -v 数据卷名称:容器内路径 镜像ID

直接指定一个路径作为数据卷的存储位置

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

举例

数据卷应用

docker run -d --name tomcat -p 8080:8080 -v /root/qfnj/:/usr/local/tomcat/webapps tomcat

image.png 当我们修改数据卷当中的内容,容器中的也会变化

我们将root下面的qfnj里面的文件进行修改,同时docker容器里面也会变化,我们将这个数据卷用到多个容器时,当我们在root里面修改以后,这些容器都会同步跟着变化