docker--容器数据进行持久化存储的三种方式


为什么Docker容器需要使用持久化存储

1.什么是Docker容器?

Docker是一种流行的容器化技术,它允许开发者将应用程序及其依赖打包在一个轻量级、可移植的容器中。与虚拟机不同,Docker容器共享主机操作系统的内核,因此更轻便和高效。

2.什么是持久化存储?

持久化存储指的是保存数据的方法,这些数据在应用程序或系统重启后仍然存在。在传统计算中,我们通常将数据存储在硬盘、数据库或外部存储设备上。

3.为什么Docker容器需要持久化存储?

Docker容器的设计初衷是短暂的和可替换的。所有在日常使用中容器常常处于用后即焚的状态,这意味着一旦容器停止运行或被删除,其中的数据会消失。这对于需要保存数据的应用来说是个大问题,比如数据库、日志文件或用户上传的内容。

4.Docker如何实现持久化存储?

Docker 提供了多种持久化存储方式,每种方式在不同环境和使用场景下有其独特的优势。本篇博客主要讲述Docker 卷(Volumes)、绑定挂载(Bind Mounts)和网络存储(Network Storage)的使用案例和实现方法。

注: 需要提前安装docker

(1)、Docker卷(Volumes)

简介

Docker 卷是由 Docker 管理的存储,可以独立于容器生命周期存在,适合需要在多个容器之间共享或持久化数据的场景。

适用环境:

持久化需求: 数据需要在容器重启或删除后依然存在。
多容器共享: 多个容器需要访问相同的数据。
数据备份与恢复: 需要方便地对数据进行备份和恢复操作。

使用场景:

数据库数据存储: 例如 MySQL、PostgreSQL 等数据库的数据目录。
应用配置共享: 多个容器共享配置文件或日志文件。

使用案例:

本案例使用nginx作为挂载容器的镜像

1.创建数据卷
创建一名名称为nginx-vol的数据卷

docker volume create nginx-vol

查看以下创建好的数据卷

docker volume ls 

在这里插入图片描述
查看数据卷的详细信息

docker volume inspect nginx-vol

在这里插入图片描述
可以看到关于nginx-vol这个卷的详细信息,其中就包括卷的默认存储位置

让我们查看一下

ls /var/lib/docker/volumes

在这里插入图片描述
2.使用数据卷
使用数据卷的方式有两种,分别是
运行web4容器,使用–mount选项,将容器内的/usr/share/nginx/html目录挂载到数据卷上,实现数据卷挂载

docker run -d -p 80:80  --name web3 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx:latest

常用的一般为下面这种

运行web3容器,使用–v选项,实现数据卷挂载将容器内的/usr/share/nginx/html目录挂载到数据卷上,实现数据卷挂载

docker rm -f web3
docker run -d -p 80:80 --name web3 -v nginx-vol:/usr/share/nginx/html nginx:latest

查看容器是否挂载到了数据卷上

ls /var/lib/docker/volumes/nginx-vol/_data/

在这里插入图片描述
修改index.html文件内容

echo "web3-running" > /var/lib/docker/volumes/nginx-vol/_data/index.html

查看
curl 本机ip

curl 192.168.10.11

在这里插入图片描述
查看数据持久化功能

docker rm -f web3
cat /var/lib/docker/volumes/nginx-vol/_data/index.html

可以看到即使删除了容器,nginx的页面文件依旧存在
在这里插入图片描述

(2)、绑定挂载(Bind Mounts)

简介:

绑定挂载将主机文件系统中的一个目录挂载到容器中,允许容器直接访问和修改主机上的文件。

适用环境:

开发环境: 开发过程中需要频繁修改主机文件,并立即在容器中生效。
主机与容器数据共享: 需要在主机和容器之间共享文件。

使用场景:

开发和测试: 挂载代码目录,以便在主机上编辑代码时容器能立即使用最新代码。
日志文件: 将容器的日志文件直接写入主机目录,方便监控和分析。

使用案例

创建用于容器挂载的目录

mkdir /opt/test

运行web4容器并使用bind mount方法实现本地任意目录挂载

docker run -d -p 80:80 --name web4 --mount type=bind,src=/opt/test,dst=/usr/share/nginx/html nginx:latest

查看已挂载目录,里面没有任何数据

ls /opt/test/

在这里插入图片描述
添加内容至/opt/test/index.html中

echo "web4-running" > /opt/test/index.html

使用curl命令访问容器
curl 本机ip

curl 192.168.10.11

在这里插入图片描述
测试数据持久化功能

docker rm -f web4
ls /opt/test/

可以看到文件依旧存在

(3)、 网络存储(Network Storage)

简介:

使用网络文件系统(如 NFS、CIFS 等)将远程存储挂载到容器中,适用于需要跨多个主机共享数据的场景。

适用环境:

分布式系统: 需要在多个主机上的容器之间共享数据。
集中式存储: 数据集中存储在远程文件系统中,便于管理和备份。

使用场景:

分布式应用: 例如使用 NFS 挂载配置文件和数据目录,便于集群中的所有节点访问。
企业存储: 集中存储企业级应用的数据,方便管理和备份。

使用案例

安装 NFS 并挂载:

假设使用 NFS 作为网络存储系统。

在另一台主机上上安装 NFS 客户端:

mkidr /nfsdata
yum install yum -y install nfs-utils rpcbind -y 
vim /etc/exports 

输入 /nfsdata *(rw,sync,no_root_squash)
:wq 保存退出

systemctl start rpcbind 
systemctl enable rpcbind 
systemctl start nfs-server 
systemctl enable nfs-server 
showmount -e 

nfs成功部署
在这里插入图片描述

挂载 NFS 共享:
回到本机192.168.10.11

yum -y install nfs-utils.x86_64
mount -t nfs 192.168.10.14:/nfsdata /nfs

然后就和上面绑定挂载一样了,不再过多叙述

如何选择合适的持久化存储方式

数据持久性: 需要在容器重启或删除后保留数据,建议使用 Docker 卷或网络存储。
共享需求: 如果需要多个容器或主机共享数据,网络存储或卷是较好的选择。
管理和备份: Docker 卷由于是 Docker 原生支持的,管理和备份更方便。

Docker中使用Prometheus,可以通过docker-compose实现持久化存储。具体步骤如下: 1. 创建一个docker-compose.yml文件,在其中定义Prometheus服务和数据卷。 ``` version: '3' services: prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' ports: - '9090:9090' volumes: prometheus_data: ``` 在上面的配置中,我们定义了一个名为“prometheus”的服务,它使用Prometheus的官方镜像,并将配置文件数据卷映射到宿主机上。配置文件将在后面的步骤中创建。 2. 创建Prometheus配置文件。 在宿主机上创建一个名为“prometheus.yml”的文件,并添加以下内容: ``` global: scrape_interval: 15s # 默认的采集时间为15秒 evaluation_interval: 15s # 默认的评估时间为15秒 scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: ['node-exporter:9100'] # node-exporter的服务名为node-exporter ``` 在上面的配置中,我们定义了两个作业(jobs):“prometheus”和“node_exporter”。第一个作业是Prometheus自身的监控,而第二个作业是用于监控主机资源的node_exporter。 3. 启动Prometheus服务。 在命令行中进入docker-compose.yml所在的目录,并输入以下命令启动服务: ``` docker-compose up -d ``` 这将在后台启动Prometheus服务,并将数据存储在名为“prometheus_data”的数据卷中。 现在,可以通过浏览器访问localhost:9090来访问Prometheus仪表板。可以在仪表板中添加监控指标并设置报警规则。 总结: 上述步骤演示了如何使用docker-compose在Docker持久化存储Prometheus数据。通过这种方式,可以轻松地管理和监控容器化应用程序,并确保数据不会丢失。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃龙利鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值