Docker 安装 Redis

1.docker pull redis

docker images

http://www.redis.cn/documentation.html  #中文官方文档

该命令主要是为了详细展示查看运行时的command参数
docker ps -a --no-trunc | grep container_name   # 通过docker --no-trunc参数来详细展示容器运行命令

docker inspect container_name #输出容器信息
docker history container_name #输出镜像构建信息

不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源
从官网获取 redis.conf 配置文件
修改默认配置文件
grep -v "#" redis.conf.bak > /usr/local/docker/redis.conf
vi /usr/local/docker/redis.conf

:g/^s*$/d 删除所有空行
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败
dir  ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
requirepass "123456" 

正确修改:在官方的原配置按以下修改

#bind 127.0.0.1
protected-mode yes
pidfile=/var/run/redis.pid
daemonize no
dir /usr/local/redis
stop-writes-on-bgsave-error no
appendonly yes
requirepass "123456"

2. docker 启动 redis 命令

docker run -p 6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -v /etc/localtime:/etc/localtime:ro -d redis redis-server /etc/redis/redis.conf --appendonly yes

redis-cli -h 172.17.0.1 -a 123456
  • 命令解释说明:

    • -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
    • --name myredis  指定该容器名称,查看和进行操作都比较方便。
    • -v 挂载目录,规则与端口映射相同。
    • -d redis 表示后台启动redis
    • redis-server /etc/redis/redis.conf  以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
    • appendonly yes 开启redis 持久化
    • config set stop-writes-on-bgsave-error no 强制停止redis快照
    • 加上 “-v /etc/localtime:/etc/localtime:ro” 参数,让容器使用宿主机的时间,容器时间与宿主机时间同步。
    • dir /usr/local/redis    redis备份路径
    • 重点是 dir 的默认配置一定要改,改成确定路径,这样就不会存在每次启动服务时所在的目录不一样导致dump文件找不到的问题

 3.

1. 存储: set key value

set username zhangsan 

get key  

get username "zhangsan"

set age 23  get age "23" 

set age 33  get age "33"

删除: del key 127.0.0.1:6379> del age (integer) 1 127.0.0.1:6379> get age (nil)

4.redis 常用命令

key *          查看当前库所有key
set k1 lucy    设置一个k1的值
exists k1  判断某个key是否存在
type k1    查看key类型
del key    删除指定的key数据
unlink key   根据value选择非阻塞删除
unlink key   根据value选择非阻塞删除
expire key 10  10秒钟key过期时间
ttl key    查看还有多少秒过期,-1表示永不过期,-2表示已过期
select     命令切换数据库
dbsize     查看当前数据库的key的数量
flushdb    清空当前库
flushall   通杀全部库
get        查询对应键值
append   append k1 abc将给定的追加到原值的末尾
strlen   strlen k1获得值得长度
setnx 只有在key不存在时 设置key的值

mset k1 v1 k2 v2 k3 v3  同时设置多个key值
mget k1 k2 k3           同时查询多个对应键值

redis源码安装

Redis 客户端的基本语法为:redis-cli
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"

https://www.jianshu.com/p/ebda253a8daa
更改yum源
将Centos的yum源更换为国内的阿里云源

备份你的原镜像文件,保证出错后可以恢复:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的CentOS-Base.repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装redis
yum install epel-release
yum install redis
启动redis
redis-server /etc/redis.conf &
systemctl start redis.service
设置redis开机启动
systemctl enable redis.service
高级设置
设置redis密码
打开文件/etc/redis.conf,找到其中的# requirepass foobared,去掉前面的#,并把foobared改成你的密码。
redis在启动的时候默认会启动一个保护模式,只有同一个服务器可以连接上redis。别的服务器连接不上这个redis
解决办法:关闭保护模式
1、进入redis安装目录 vi redis.conf 注释bind 127.0.0.1这一行  protected-mode yes 改成protected-mode no  允许外网服务链接
2、启动redis 登入客户端  执行下面命令 config set protected-mode "no"   临时生效,改配置永久生效
  
redis-cli -h 192.168.1.160 -p 6379 #测试外网远程连接成功

redis.conf文件默认在/etc目录下,你可以更改它的位置和名字,更改后,注意在文件/usr/lib/systemd/system/redis.service中,把ExecStart=/usr/bin/redis-server /etc/redis/6379.conf --daemonize no中的redis.conf的路径改成的新的路径。


源码下载地址:https://redis.io/download
http://download.redis.io/releases/

#资料地址 https://www.cnblogs.com/stulzq/p/9288401.html
#下载地址 wget http://download.redis.io/releases/redis-3.2.11.tar.gz

1.下载源码并解压
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
yum -y install epel*
yum -y install iftop htop unzip net-tools
yum -y install openssh-clients  
yum -y install gcc gcc-c++ ncurses-devel pcre* openssl* zlib zlib-devel wget net-snmp-devel curl-devel perl-DBI
tar -xzf redis-4.0.10.tar.gz
cd redis-4.0.10

2.编译

make

3.安装
make PREFIX=/usr/local/redis install
mkdir /usr/local/redis/etc/
cp redis.conf /usr/local/redis/etc/
cd /usr/local/redis/bin/
cp redis-benchmark redis-cli redis-server /usr/bin/

4.更改配置
vim /usr/local/redis/etc/redis.conf
:g/^s*$/d 删除所有空行
# 修改一下配置
# redis以守护进程的方式运行
# no表示不以守护进程的方式运行(会占用一个终端)  
daemonize yes
pidfile=/var/run/redis.pid
# 客户端闲置多长时间后断开连接,默认为0关闭此功能                                      
timeout 300

# 设置redis日志级别,默认级别:notice                    
loglevel verbose

# 设置日志文件的输出方式,如果以守护进程的方式运行redis 默认:"" 
# 并且日志输出设置为stdout,那么日志信息就输出到/dev/null里面去了 
logfile stdout
# 设置密码授权
requirepass <设置密码>
# 监听ip
bind 127.0.0.1

5.配置环境变量
vim /etc/profile
export PATH="$PATH:/usr/local/redis/bin"
# 保存退出

# 让环境变量立即生效
source /etc/profile

6.配置启动脚本
#!/bin/bash
#chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
   
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/etc/redis.conf"
   
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ] 
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac

7.开启自启动设置
# 复制脚本文件到init.d目录下
cp redis /etc/init.d/

# 给脚本增加运行权限
chmod +x /etc/init.d/redis

# 查看服务列表
chkconfig --list

# 添加服务
chkconfig --add redis

# 配置启动级别
chkconfig --level 2345 redis on

8.启动测试
systemctl start redis   #或者 /etc/init.d/redis start  
systemctl stop redis   #或者 /etc/init.d/redis stop

# 查看redis进程
ps -el|grep redis

# 端口查看
netstat -an|grep 6379







参数	值	说明
daemonize	yes	使redis以守护进程的方式运行
dir	/var/redis	redis服务持久化文件的存放位置

redis-cli -h host -p port -a password  在远程服务上执行命令

daemonize no #修改redis的守护进程为no ,不启用    
#bind 127.0.0.1 #注释以下绑定的主机地址    
protected-mode no #修改redis的保护模式为no,不启用   


删除所有Key
删除所有Key,可以使用Redis的flushdb和flushall命令

//删除当前数据库中的所有Key
flushdb
//删除所有数据库中的key
flushall

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。

原因
强制关闭Redis快照导致不能持久化。

解决方案
将stop-writes-on-bgsave-error设置为no

这仅仅是让程序忽略了这个异常,使得程序能够继续往下运行,但实际上数据还是会存储到硬盘失败!

解决办法

http://www.redicecn.com/html/Linux/20131125/468.html

为了修正这个问题,请在/etc/sysctl.conf 添加一项 'vm.overcommit_memory = 1' ,然后重启(或者运行命令'sysctl vm.overcommit_memory=1' )使其生效。)

修改参数

vi /etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效

redis配置文件

protected-mode no
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/usr/local/redis/logs/redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass rP9yf2M1jGwNNjAT
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

你可能感兴趣的:(docker,docker,redis,容器)