Docker基础-22-volume-数据持久化之data volume

本文深入探讨Docker的数据持久化方案,重点讲解DataVolume的使用,包括受管理的dataVolume和绑定挂载的Volume。通过MySQL镜像示例,演示如何将容器数据绑定到本地磁盘,确保数据安全,即使容器被删除也能保留数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面基本上把docker网络学习了一遍,docker中多机网络overlay网络,这里由于暂时不学习,在docker基础中。前面文章,我们学习了image, container, network, 接下来,我们要学习docker的持久化存储和数据共享的相关知识。

 

 

上面这个图在前面容器和镜像区别我们学习过,这里我们重点看container layer,这是我们接下来好几篇文章需要学习的内容。在docker中,默认是数据存储在container layer,也就是容器层中。因为只有这一层是可写的,其他层是镜像文件层,是只读的。那么问题就来了,既然数据都默认存储在容器层,如果容器关闭,并且被删除了,也就意味着数据也删除了,找不回来了。这种问题很严重,docker为了解决这种问题,出现一种机制。就是把数据转移到外挂或者mount的磁盘上。例如把容器里数据,同步到外层linux主机磁盘上。这样即使容器被删除了,容器里面数据还是保留在linux主机上,下次我们再启动一个容器,配置读取外层linux这个外挂的文件系统中数据,这个容器恢复正常服务功能。

 

Docker对数据持久化的方案

解决方案有两大类,基于本地文件系统的Volume,也就是外层linux主机上磁盘存储数据;第二种是通过插件的Volume,例如通过第三方插件,可以把容器里面数据通过网络,同步到AWS云存储中。我们接下来学习主要是第一种方案,基于本地文件系统的Volume.

 

Volume的类型

第一种是受管理的data Volume, 由docker后台自动创建。

第二种是绑定挂载的Volume,具体挂载位置可以由用户指定。

 

数据持久化之Data Volume

其实Volume这个关键字,我们在学习Dockerfile语法的时候跳过。同样前面几篇学习网络,我们还没有提EXPOSE这个命令,这里补充一下,EXPOSE是把容器里面端口和外层linux端口进行绑定的作用,具体练习,我打算后面用jenkins镜像来练习。本篇,我们通过mysql的镜像来学习VOLUME这个语法和volume对象。

先去,hub.docker官网看看mysql的latest的dockerfile内容。打开网站https://hub.docker.com/_/mysql,例如,我们来看mysql 5.6版本的dockerfile内容。

上面红圈里的 VOLUME 告诉了我们在容器里存储mysql全部的数据(数据库,日志文件等)存储在/var/lib/mysql路径下,docker通过volume对象,也就是容器里有一个volume对象,容器外的linux机器也有与之对应的一个volume对象,两个配对的volume对象的机制确定了docker数据持久化实现。而且外层volume对象一旦创建,不会随着容器的消失而消失。

 

下面我们本地下载一个mysql的最新镜像,然后启动一个mysql的容器,看看这个容器里和容器外的volume对象。

先执行命令: docker pull mysql,拉一个默认latest的镜像到本地。然后使用下面命令去启动一个mysql容器

命令:docker run -d --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 mysql

这样,我们启动了一个mysql容器实例,root密码是123456,下面学习docker关于查询volume对象的命令。

目前,我只启动了一个mysql容器,其他容器也没有启动,这个红圈的就是mysql容器对应的volume对象,这个对象是不会随着mysql1这个容器删除而消失。下面我们使用-f强制停止并删除mysql1这个容器,然后看看这个volume对象是否被删除。

如果启动容器不指定-v参数,那么默认产生的volume对象就是这么一大串。
现在我把这个volume对象删除,然后启动容器的时候指定一个具体有意义的volume名称。

下面学习启动容器指定volume对象的命名,具体可以学习官网文章https://hub.docker.com/_/mysql 

docker run -d --name mysql1 -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql


这里提醒(不要copy我的)一下中文输入法的-,有时候没有注意,老是发现名字执行不对,说请参考docker run –help,问题就是出现使用中文输入法输入短横线一杠,改成英文输入就好。

使用volume inspect 可以查看volume挂载的信息,上面红圈显示,挂载在linux机器上的/var/lib/docker/volumes/mysql下。当然默认是这个路径,你可以使用-v参数指定其他路径,例如-v /tmp/mysql:/var/lib/mysql这样也是可以的。

下面来演示一下,容器由于某些原因被删除,数据库持久化在本地的场景,这样数据库数据没有丢,再次启动新的mysql容器,就能访问数据库 这样一个简单的例子。

先进入mysql1容器,使用sql语句,创建一个docker的数据库

密码是123456,连接上了数据库。

当前有4个数据库,我们新增一个叫docker的数据库。

删除上面运行的mysql容器,并查看mysql这个volume对象。

启动mysql2容器,-v参数指定到原来的存在的volume对象mysql

然后进入容器mysql2,查看docker这个数据库是否还在。

 到这里,关于docker数据持久化机制一data volume方式就学习到这里。通过mysql这个例子,我们至少大概如何把一个容器的数据绑定到本地机器的磁盘里。本文章,学习了docker中volume对象,以及volume inspect介绍查询,还有如何在启动容器过程绑定一个volume对象。如果这个-v 后面是跟着一个路径,那么就是更改默认的volume挂载路径,本文没有演示这个,可以自己去试一下。

<think>嗯,用户问的是如何用`docker volume create`命令创建一个名为minio-dataDocker卷。首先,我需要回忆一下Docker卷的基本操作。记得创建卷的命令应该是`docker volume create`后面跟上卷名,对吧?那正确的命令应该是`docker volume create minio-data`。不过,得确认一下有没有其他参数可能需要添加,比如指定驱动或者标签之类的。用户的需求里没有提到这些,所以保持简单应该没问题。 接下来,用户可能在部署MinIO服务时会用到这个卷,比如在`docker run`或者`docker-compose.yml`中挂载它。比如在docker-compose文件里,volumes部分可能会引用这个创建的卷。例如,在服务配置里指定`volumes: - minio-data:/data`,然后在顶层的volumes部分声明`minio-data: external: true`。这样容器就能使用这个预先创建好的卷了。 另外,用户之前提到了关于MinIO证书权限的命令,比如`sudo chown minio-user:minio-user /etc/minio/certs/private.key`,这可能意味着他们在配置MinIO时需要处理卷中的文件权限问题。所以,可能需要提醒用户注意卷中文件的权限,特别是当容器以特定用户身份运行时,可能需要调整卷的权限或者使用正确的用户上下文创建卷。 此外,用户可能在之前的问题中遇到过启动RabbitMQ的docker-compose命令,所以对于Docker的基本操作应该有一定的了解。但为了确保,还是需要给出清晰的步骤,比如直接运行创建命令,然后验证卷是否存在,可以使用`docker volume ls`来查看所有卷的列表,确认minio-data是否成功创建。 最后,考虑到用户可能会在后续步骤中遇到问题,比如如何挂载这个卷到容器里,或者如何处理数据持久化的问题,可以生成相关问题,帮助他们进一步深入。比如如何挂载到特定路径,或者如何备份Docker数据等。</think>### 创建名为minio-dataDocker卷 1. **执行创建命令** 使用以下命令直接创建持久化存储卷: ```bash docker volume create minio-data ``` 该命令会创建一个名为`minio-data`的卷,采用默认的`local`驱动[^1]。 2. **验证创建结果** 通过列出所有Docker卷确认操作成功: ```bash docker volume ls ``` 输出应包含类似内容: ``` DRIVER VOLUME NAME local minio-data ``` 3. **应用场景示例** 在MinIO容器部署时挂载该卷(以`docker run`为例): ```bash docker run -d \ -v minio-data:/data \ --name minio-server \ minio/minio server /data ``` 此配置会将容器内的`/data`目录绑定到宿主机的`minio-data`卷,实现数据持久化[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值