一、 docker 拉去最新版本的redis

  `docker pull redis:6.0.6` #后面可以带上tag号, 默认拉取最新版本

二、 docker安装redis

执行命令:

mkdir -p /usr/local/docker/redis/conf
chmod -R 777 /usr/local/docker/redis
cd /usr/local/docker/redis/conf
wget http://download.redis.io/redis-stable/redis.conf #下载redis的配置文件 (跳此步,直接下一步,我已经写好配置了)
vim redis.conf #更改配置文件, 让宿主机可以访问redis-server #保存并退出

编辑配置文件
/usr/local/docker/redis/conf/redis.conf

redis.conf 文件

#开启保护
protected-mode yes
#开启远程连接 
#bind 127.0.0.1 
#自定义密码
requirepass 12345678 
port 6379
timeout 0
# 900s内至少一次写操作则执行bgsave进行RDB持久化
save 900 1 
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec

保存退出

参数说明
1.修改保护模式protected-mode yes 默认为yes 可以跳过这一步

​ Redis protected-mode属性解读

​ 设置外部网络连接redis服务,设置说明如下:

​ a.关闭protected-mode模式,此时外部网络可以直接访问

​ b.开启protected-mode保护模式,需配置bind ip 和设置访问密码 redis3.2版本后新增protected-mode配置,默认是yes,即开启。

2.把bind 127.0.0.1 注释掉 #bind 127.0.0.1, 这样所有的ip都可以访问了

3.设置密码(根据自己的需要)

设置永久密码的方法

找到requirepass foobared 把foobared改为自己的登陆密码 这里我设置为123456

requirepass 123456

设置临时密码的方法

在连接上redis后,config set设置临时密码,redis重启后,设置的密码就失效了

127.0.0.1:6379> config set requirepass "123456" # 设置密码为123456
OK
127.0.0.1:6379> config get requirepass # 获取密码的值

  1. "requirepass"
  2. "123456"

4.appendonly yes #开启AOF模式

三、编写 docker-compose.yaml文件

[root@iZ2ze505h9bgsbp83ct28pZ redis]# cd /usr/local/docker/redis
[root@iZ2ze505h9bgsbp83ct28pZ redis]# vim docker-compose.yml

写入下面的内容

version: '3.8'
services:
  myredis:
    container_name: myredis
    image: redis:6.0.6
    restart: always
    ports:
      - 6379:6379
    privileged: true
    command: redis-server /etc/redis/redis.conf --appendonly yes
    volumes:
      - $PWD/data:/data
      - $PWD/conf/redis.conf:/etc/redis/redis.conf
    networks:
      - myweb

networks:

  myweb:
    driver: bridge

说明:
/etc/redis/redis.conf为容器里的目录
$PWD/conf/redis.conf 为宿主机里的目录

启动前的目录结构

root@haima-PC:/usr/local/docker/redis# tree
.
├── conf
│   └── redis.conf
└── docker-compose.yml

四、启动容器

[root@iZ2ze505h9bgsbp83ct28pZ redis]# docker-compose up -d # 后台启动
[root@iZ2ze505h9bgsbp83ct28pZ redis]# docker ps -a #查看启动的容器
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                    PORTS                                                NAMES
f0970e970457        redis                    "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes              0.0.0.0:6379->6379/tcp                               myredis
[root@iZ2ze505h9bgsbp83ct28pZ redis]# docker exec -it myredis redis-cli # 启动redis客户连接redis服务 
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456 # 输入密码登陆
OK
127.0.0.1:6379> set name test
OK
127.0.0.1:6379> get name 
"test"

到这里就ok了,

启动后的目录结构

root@haima-PC:/usr/local/docker/redis# tree
.
├── conf
│   └── redis.conf
├── data
│   ├── appendonly.aof
│   └── dump.rdb
└── docker-compose.yml

五、限制内在和CPU

如果想要限制内在和CPU

1.2加入deploy的resource limit

version: '3.8'
services:
  myredis:
    container_name: myredis
    image: redis:6.0.6
    restart: always
    ports:
      - 6379:6379
    privileged: true
    command: redis-server /etc/redis/redis.conf --appendonly yes
    volumes:
      - $PWD/redis/data:/data
      - $PWD/conf/redis.conf:/etc/redis/redis.conf
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 500M
    networks:
      - myweb

networks:

  myweb:
    driver: bridge

2.启动container时加入--compatibility参数

docker-compose --compatibility up -d

2.1启动时未加入-compatibility的警告

WARNING: Some services(redis)use the 'deploy' key,which will be ignored.Compose does not support 'deploy' configuration - use docker stack deploy to deploy to a swarm.

查看redis的CPU和内存使用状态

[root@iZ2ze505h9bgsbp83ct28pZ redis]# docker stats myredis
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
2cb96f4cfcf9        myredis             0.10%               9.59MiB / 500MiB    1.92%               2.69kB / 0B         0B / 0B             5