拉取 redis 镜像

拉取 redis 镜像,获取当前最新的 Stable (7.2):docker pull redis:7.2.0

Redis 相关的配置

  • 创建挂载目录以及获取 redis.conf 配置文件
  • 创建挂载目录

    1
    mkdir -p /opt/docker/redis
  • 配置文件挂载

    1
    2
    cd /opt/docker/redis
    wget http://download.redis.io/redis-stable/redis.conf
  • 修改配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 这行要注释掉,解除本地连接限制
    bind 127.0.0.1 --> 需要注释掉

    # 保护模式是一层安全保护,以避免在互联网上打开的 Redis 实例被访问和利用。
    # 当保护模式打开并且默认用户没有密码时,服务器仅允许在本机的回环连接,其他机器无法连接。
    # 默认为 yes,在生产环境下一般设置为 no,这样可以避免客户端连接时出现超时或连接不上的情况。
    protected-mode no

    # 默认 no 为不守护进程模式,docker 部署不需要改为 yes,docker run -d 本身就是后台启动,不然会冲突
    daemonize no

    # 设置密码
    requirepass yourPassword

    # 持久化
    appendonly no # 目前所有缓存都不需要持久化
  • 通过 docker run 命令运行 redis 镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    docker ps -a | grep redis

    docker stop redis

    docker rm redis
    docker run \
    -p 6379:6379 \
    --name redis \
    --restart=always \
    --privileged=true \
    -v /opt/docker/redis/redis.conf:/etc/redis/redis.conf \
    -e TZ=Asia/Shanghai \
    -d redis:7.2.0 \
    redis-server /etc/redis/redis.conf

    docker logs redis

    root@600884db5654:/etc# date
    Mon Sep 4 10:04:00 CST 2023

    # 不设置时区
    docker rm redis
    docker run --name redis -p 6379:6379 \
    -v /opt/docker/redis/redis.conf:/etc/redis/redis.conf \
    -d redis:7.2.0 \
    redis-server /etc/redis/redis.conf

    root@c786b9927e14:/data# date
    Mon Sep 4 02:09:14 UTC 2023

    # 进入容器
    docker exec -it redis /bin/bash

    # 或额外添加 privileged 配置
    docker run --name redis -p 6379:6379 \
    --privileged=true \
    -v /opt/docker/redis/redis.conf:/etc/redis/redis.conf \
    -d redis:7.2.0 \
    redis-server /etc/redis/redis.conf

命令说明

  • --name redis 为容器指定一个名称,查看和进行操作都比较方便。
  • -p 6379:6379 指定端口映射,格式为:主机(宿主)端口:容器端口
  • --privileged=true 开启特殊权限
  • -e "TZ=Asia/Shanghai" 设置时区

  • Docker 挂载主机目录时(添加容器数据卷),如果 Docker 访问出现 cannot open directory:Permission denied,在挂载目录的命令后多加一个 --privileged=true 参数即可。

  • 因为出于安全原因,容器不允许访问任何设备,privileged 让 docker 应用容器获取宿主机 root 权限(特殊权限),允许我们的 Docker 容器访问连接到主机的所有设备。容器获得所有能力,可以访问主机的所有设备,例如,CD-ROM、闪存驱动器、连接到主机的硬盘驱动器等。
  • -v 挂载文件或目录:前面是宿主机部分,后面是容器部分
  • -d redis 表示后台启动 redis;使用此方式启动,则 redis.conf 中 daemonize 必须设置为 no,否则会无法启动
  • redis-server /etc/redis/redis.conf 在容器内启动 redis-server 的命令,用于加载容器内的 conf 文件,最终找到的是挂载的目录 /docker/redis/redis.conf
  • --appendonly yes 开启 redis 持久化
  • --restart=always 主机重启后自动重启该容器镜像

查看 redis

docker ps -a --no-trunc | grep redis

  • 启动容器后,可以使用docker exec命令进入到容器内部,执行相关操作:docker exec -it redis /bin/bash
  • 查看启动情况:docker logs redis
  • 登录时直接输入密码:redis-cli -a yourPassword,提示 bash: !d: event not found,用下面的方式认证可行。
  • 分两步登录认证:redis-cli,然后 auth password,password 为实际密码
1
2
3
4
5
6
7
8
9
10
11
12
root@56014ab3d6c0:/data# redis-cli
127.0.0.1:6379> config get timezone
(error) NOAUTH Authentication required.

root@56014ab3d6c0:/data# redis-cli -h 127.0.0.1 -p 6379 -a `yourPassword`
bash: !d`: event not found
root@56014ab3d6c0:/data# redis-cli
127.0.0.1:6379> auth yourPassword
OK
127.0.0.1:6379> config get timezone
(empty array)
127.0.0.1:6379>

操作 redis

1
2
3
4
5
6
7
docker ps -a | grep redis
docker exec -it ff04f54b4873 redis-cli INFO
docker exec -it <redis-container-name> redis-cli INFO memory

# 以下提示,需要登录信息
NOAUTH Authentication required.
docker exec -it ff04f54b4873 redis-cli -h10.0.96.3 -p6379 -a'yourPassword INFO'

进入 docker

1
docker exec -it redis /bin/bash

相关文章

docker 相关