Docker 下 Redis 数据库的持久化

1、Docker 容器的数据卷

  Docker 是将系统与运行的环境打包成容器来运行,当容器删除后,容器里的系统自然也就没有了。但是,在实际的项目中,希望 Docker 容器产生的数据能够持久化,同时容器之间也能够共享数据。Docker 提供了数据卷技术来实现这些需求。
  数据卷就是目录或文件,存在于一个或多个容器中,由 Docker 挂载到容器上,完全独立于容器的生存周期,Docker 不会在容器删除时删除其挂载的数据卷。即容器删除了,数据卷仍然存在,从而实现了容器数据的持久化。
数据卷的特点:
(1)数据卷是宿主机中的一个目录或文件
(2)当容器目录和数据卷目录绑定后,对方的修改会立即同步
(3)一个数据卷可以被多个容器同时挂载,可在容器之间共享或重用数据
(4)一个容器也可以被挂载多个数据卷
 
2、数据卷的实现
创建启动容器时,使用–v 参数来设置数据卷
语法:docker run -v /宿主机绝对路径目录:/容器内目录 镜像名.....
 
3、 Docker 容器下 Redis 的数据持久化
3.1 将容器内 Redis 的 RDB 持久化数据保存到容器外的某个路径下
(1)创建 redis 容器,并挂载数据卷
(2)在 cmd 中运行以下命令:
docker run -d --name redis_1 -p 6379:6379 -v /d/redis/data:/data redis
(3)命令解释:-v /d/redis/data:/data
-v:实现宿主机的目录和容器内目录的映射;
/d/dockerdata/redis/data 表示”D:\redis\data”路径,该路径如果不存在,Docker 会自动创建;
/data 表示容器内的路径:该路径是容器内 redis 的自动创建的目录;
命令成功执行,会出现相关信息,表示容器正在运行。
  注意:如果“D:\redis\data”事先没有创建,Docker 会自动创建该路径。
(4)使用 redis-cli.exe 连接 redis 容器,写入数据,执行 RDB 操作。
(5)查看实现宿主机的目录和容器内目录的映射
“D:\redis\data”路径下,出现了 dump.rdb 文件
执行命令,进入容器内,可以发现 data 路径下也有 dump.rdb 文件
(6)停止然后再次启动 redis_1 容器;
(7)可以发现,可以直接查询到 k1 的值。这说明,虽然 redis_1 停止时,数据丢失了,但是当它重新启动时,读取了“D:\redis\data”里的 dump.rdb 文件,恢复了数据。
 
3.2 将容器内 Redis 的 AOF 持久化数据保存到容器外的某个路径下
(1)创建 redis 容器,并挂载数据卷
(2)在 cmd 中运行以下命令:
docker run -d --name redis_2 -p 6379:6379 -v /d/redis/data:/data redis
--appendonly yes
(3)命令解释:--appendonly yes
该命令表示 redis_2 容器开启 AOF 持久化模式。但是,该参数只在当前命令中有效。
命令成功执行,会出现相关信息,表示容器正在运行。
 
(4)使用 redis-cli.exe 连接 redis 容器,写入数据
(5)查看实现宿主机的目录和容器内目录的映射
“D:\redis\data”路径下,出现了 appendonly.aof 文件,而且该文件中写入了操作命令。
(6)执行命令,进入容器内,可以发现 data 路径下也有 appendonly.aof 文件。
(7)同样,当 redis_2 重新启动时,可以读取“D:\redis\data”里的 appendonly.aof文件,恢复数据。
  如果容器创建或运行时出错,可使用以下命令查询容器的日志信息:
  docker logs 容器名或 ID




posted @ 2023-04-05 13:36  Linqylin  阅读(607)  评论(0编辑  收藏  举报