在Centos Stream 9上Docker的实操教程(三) - Docker容器数据卷

在Centos Stream 9上Docker的实操教程 - Docker容器数据卷

  • 问题场景
  • Docker容器数据卷简单介绍
  • 数据卷使用
  • 操作实例
      • 安装redis
      • 验证配置文件生效
      • 验证数据是否丢失
  • 结语

问题场景

Docker容器我们可以理解就是微型的linux系统,在使用容器的时候自然会产生一系列数据文件,当容器被我们删除的时候,数据也会一并删除,那么就会产生以下种种问题:

  • 如何保证mysql容器的数据不会随着容器删除而丢失?
  • 如果同时运行两个nginx容器,它们希望共享一个配置文件怎么处理?
  • 能不能直接在宿主机修改redis配置文件并立即生效?
  • 等等…

想要解决上述的相关问题,那么就引出了我们的Docker容器数据卷

Docker容器数据卷简单介绍

数据卷(Data Volumes) 是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器。可以简单的理解为docker容器数据卷就是我们使用的移动硬件,它存在于一个或多个的容器中,由 docker挂载到容器,但不属于联合文件系统(Union FileSystem),Docker不会在容器删除时删除其挂载的数据卷。

它可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 卷会一直存在,直到没有容器使用

数据卷使用

我们之前在介绍常用命令dcoker run的时候应该看到了 -v 的一个参数,没错它就是用来指定数据卷的

docker run -d -v 主机目录:容器目录 镜像名称

操作实例

安装redis

我们本章将以redis为例,演示配置文件配置和防止redis缓存数据的丢失;
首先博主宿主机定义的数据卷目录如下(大家可以自行定义):

  • redis配置文件目录 /data/redis/redis.conf
  • redis数据data文件目录 /data/redis/data

顺便复习一下上一章节dicker常用命令

#拉取镜像
docker pull redis
#查看镜像
docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        latest    0ec8ab59a35f   6 days ago   117MB

因为我们用的latest版本,我们到github官网下载一份最新的redis配置文件,地址https://github.com/redis/redis/blob/unstable/redis.conf
保存至我们redis配置文件目录,即 /data/redis/redis.conf 大家按需修改配置文件即可

注意配置文件中一定要设置 否则会导致-d 冲突从而无法启动的问题

#关闭仅允许本机访问
# bind 127.0.0.1 ::1

#关闭后台启动
daemonize no

开始执行挂载数据卷,一个是配置文件,一个是redis数据文件

docker run -p 6379:6379 --name myredis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf

#查看容器
docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                       NAMES
32546e99aa31   redis     "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   myredis

验证配置文件生效

首先进入容器 myredis 是我们创建容器时定义的命名 --name myredis

docker exec -it myredis /bin/bash

我们知道配置文件中默认的 databases=16 ,则最大我们选择数据库最大只能15,如图
在Centos Stream 9上Docker的实操教程(三) - Docker容器数据卷_第1张图片
我们修改宿主机中的redis配置文件将数据库最大支持10个;

#修改配置文件
vim /data/redis/redis.conf
#修改databases最大支持数
databases 10

修改完成保存退出,我们重启我们的容器

#重启redis容器
docker restart myredis
#重新进入容器
docker exec -it myredis /bin/bash
#进入redis
redis-cli
#测试选择库
select 15

不出意外会得到下面的图
在Centos Stream 9上Docker的实操教程(三) - Docker容器数据卷_第2张图片
从而得出一个结论证明容器里redis读取的配置就是我宿主机中的配置;

验证数据是否丢失

为了验证数据丢失问题我们将redis容器删除,再次之前我们redis先设置几个key,我们现在有两个key
在Centos Stream 9上Docker的实操教程(三) - Docker容器数据卷_第3张图片

开始删除容器

#停止容器
docker stop myredis
#删除容器
docker rm -f myredis

重新安装新的redis容器,同样挂载相同的配置目录和data目录;

docker run -p 6379:6379 --name myredis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf

#重新进入容器
docker exec -it myredis /bin/bash
#进入redis
redis-cli
#查看key 注意之前测试插入key选择是哪个库,进行select
keys *

最终如下图:
在Centos Stream 9上Docker的实操教程(三) - Docker容器数据卷_第4张图片
OK我们也证明了容器里redis保存的数据已经和宿主机进行了挂载关联,容器删除只要宿主机数据还在,重新恢复容器数据依旧存在;

结语

通过本章redis的操作实例,大家应该能明白容器数据卷使用的目的,如果你还不是很清楚,没关系可以点赞关注,后续章节将会有更多实操案例让大家巩固了解!

下一章:在Centos Stream 9上Docker的实操教程 - Docker公有仓库和私有仓库

你可能感兴趣的:(Docker,docker,centos,运维)