docker创建redis

创建redis容器

1. 使用 docker run 命令:

Bash复制

docker run -d -p 6379:6379 redis:7.0.14
  • docker run: 启动一个新的容器。
  • -d: 在后台运行容器。
  • -p 6379:6379: 将容器内部的 6379 端口映射到宿主机的 6379 端口,以便外部访问 Redis。
  • redis:7.0.14: 指定要使用的 Redis 镜像,这里使用的是官方提供的 Redis 7.0.14 镜像。

2. 使用 docker-compose.yml 文件:

Yaml复制

version: "3"

services:

  redis:
    image: 'redis:6.0'
    restart: always
    hostname: redis
    container_name: redis
    volumes:
      - ../data/redis_data:/data
      - ../redis/redis.conf:/usr/local/etc/redis/redis.conf
    environment:
      - REDIS_CONFIG_FILE=/usr/local/etc/redis/redis.conf
    ports:
      - '6379:6379'
    command: redis-server --requirepass your_password --appendonly yes
  • version: '3.7': 指定 Docker Compose 版本。
  • services: 定义服务列表。
  • redis: 定义 Redis 服务。
  • image: redis:7.0.14: 指定 Redis 镜像,这里使用的是官方提供的 Redis 7.0.14 镜像。
  • ports: - "6379:6379": 将容器内部的 6379 端口映射到宿主机的 6379 端口。
  • environment:可以指定环境变量,示例里指定了redis的参数配置,可以不指定,使用默认配置
  • command:可以显示指定具体的redis配置项,appendonly yes表明需要使用aof

使用 docker-compose 启动容器:

  1. 将配置文件保存为 docker-compose.yml
  2. 在终端运行 docker-compose up -d 命令启动 Redis 容器。

其他配置:

  • 你可以通过添加 command 和 environment 配置项来设置 Redis 的密码、数据目录、持久化模式等参数。

  • 例如,设置密码:

    Yaml复制

    command: redis-server --requirepass "your_password"
    environment:
      - REDIS_PASSWORD=your_password 
    
  • 你可以使用 volumes 配置项将本地目录挂载到容器的数据目录,以便持久化数据。

示例:

Yaml复制

version: '3.7'

services:
  redis:
    image: redis:7.0.14
    ports:
      - "6379:6379"
    command: redis-server --requirepass "your_password"
    environment:
      - REDIS_PASSWORD=your_password
    volumes:
      - ./data:/data

注意:

  • 使用 docker-compose 可以更方便地管理多个容器,并进行配置。
  • 在使用 docker run 或 docker-compose up 启动容器时,可以使用 -d 选项在后台运行容器,可以使用 -p 选项指定端口映射。
  • redis7.0以后得版本使用docker部署会失败,网上说是有bug不建议使用,如果一定要用的话可以打开特权模式的开关,我试过可以正常部署

持久化:

在 Redis 中,RDB 文件是一种持久化方式,用于将 Redis 数据存储到磁盘上。你可以通过以下几种方式来生成 RDB 文件:

  1. 手动执行 SAVE 命令:
    在 Redis 中,你可以通过执行 SAVE 命令来生成 RDB 文件。该命令会阻塞 Redis 服务器,直到 RDB 文件生成完成为止。你可以在 Redis 命令行中执行以下命令:

    SAVE

    执行完毕后,Redis 会在工作目录中生成一个名为 dump.rdb 的 RDB 文件。

  2. 配置自动保存:
    你也可以在 Redis 配置文件中设置自动保存的规则,让 Redis 定期生成 RDB 文件。在 redis.conf 配置文件中,你可以设置类似以下的配置:

    save 900 1   # 表示在 900 秒(15分钟)内,如果至少有 1 个 key 被修改,则生成 RDB 文件
    save 300 10  # 表示在 300 秒(5分钟)内,如果至少有 10 个 key 被修改,则生成 RDB 文件
    save 60 10000  # 表示在 60 秒内,如果至少有 10000 个 key 被修改,则生成 RDB 文件

    这些设置会让 Redis 在满足条件时自动执行 SAVE 命令来生成 RDB 文件。

  3. 使用 BGSAVE 命令:
    你还可以在 Redis 命令行中执行 BGSAVE 命令来在后台生成 RDB 文件,而不会阻塞 Redis 服务器:

    BGSAVE

    这将会在后台生成一个新的 RDB 文件。

恢复dump文件到redis容器

Redis 恢复的机制

  • 如果只配置 AOF ,重启时加载 AOF 文件恢复数据;
  • 如果同时配置了 RDB 和 AOF ,启动是只加载 AOF 文件恢复数据;
  • 如果只配置 RDB,启动是将加载 dump 文件恢复数据。

要将Redis RDB文件中的数据恢复到Redis容器中,可以按照以下步骤进行操作:

  1.  找到Redis容器的ID或名称:
恢复aof数据修改配置:appendonly yes

恢复rdb数据修改配置:appendonly no

如果想要先恢复rdb的数据,再开启aof的话可以先修改appendonly no,启动服务恢复完数据后,再通过CONFIG SET appendonly yes命令动态修改开启aof
  1. 将RDB文件复制到Redis容器所在的主机上,假设文件名为 dump.rdb
  2. 找到Redis容器的ID或名称:

    docker ps
  3. 将RDB文件复制到Redis容器内部:

    docker cp dump.rdb CONTAINER_ID:/data/dump.rdb

    这将把RDB文件复制到Redis容器的 /data 目录中(假设容器中Redis的数据目录是 /data)。如果有按照上面说的自定义数据目录到/data,就不需要执行以下4,5,6步

  4. 进入Redis容器:

    docker exec -it CONTAINER_ID /bin/bash
  5. 在Redis容器内部,将新的RDB文件移动到Redis数据目录,并覆盖原有的RDB文件:

    mv /data/dump.rdb /var/lib/redis/dump.rdb
    #只有在没有配置默认数据目录的情况下redis才会读取这个目录(不确定),我只使用过自定义数据目录的情况,/var/lib/redis目录可能不存在,需要手动创建再执行
  6. 退出容器:

    exit
  7. 重启Redis容器,使更改生效:

    docker restart CONTAINER_ID

这样,新的RDB文件就会被加载到Redis容器中,并且数据会被恢复。请确保在进行操作前备份了原有的RDB文件和Redis数据,以便在需要时进行恢复。

确认数据恢复:

  • 使用 Redis 客户端工具(例如 redis-cli)连接到 Redis 容器。
  • 使用 KEYS * 命令查看所有键,确认数据已经恢复到 Redis 容器中。

示例:

假设你的 RDB 文件名为 dump.rdb,容器名称为 redis,数据目录为 /data,Redis 服务器的密码为 your_password,你可以使用以下命令进行恢复:

Bash复制

docker cp dump.rdb redis:/data/dump.rdb
docker restart redis
redis-cli -h localhost -p 6379 -a your_password
KEYS *

注意:

  • 如果你的 Redis 容器使用的是自定义配置,确保数据目录的路径与配置文件中设置的路径一致。
  • 如果你使用的是 docker-compose,可以使用 docker-compose exec redis bash 命令进入容器,并在容器内部执行命令进行数据恢复。
  • 如果你的 RDB 文件非常大,建议使用 docker cp 命令进行传输,避免使用 docker exec 命令,因为 docker exec 可能会因为文件大小限制而导致传输失败。
  • 在数据恢复之前,最好备份现有的 Redis 数据,以防数据丢失。
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值