BCLinux容器应用镜像使用手册-Redis


  • BCLinux Developers

    BCLinux容器应用镜像使用手册-Redis

    什么是Redis

    Redis是一个开源的 key-value,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,Redis 支持 master-slave(主-从)模式应用,支持数据的持久化,可以将内存中的数据村春在硬盘中,重启、断电的时候并不会丢失数据。

    安装

    • 从BCLinux提供的镜像仓库拉取最新的Redis容器镜像:
    docker pull bclinux/redis:latest
    
    • 也可以通过docker build本地建立Redis镜像:
    git clone git@gitlab.cmss.com:linux/bclinux-dockerfiles.git
    cd bclinux-dockerfiles/redis/bclinux7
    docker build -t bclinux/redis:latest .
    

    运行

    • Docker
    docker run --name redis bclinux/redis:latest
    
    • Docker Compose
    version: '2'
    
    services:
      redis:
        image: 'bclinux/redis:latest'
        ports:
          - '6379:6379'
    

    数据持久化

    在默认情况下如果删除了容器,所有数据都会丢失,在下次启动同样的容器镜像时,Redis数据库会重新初始化。为了避免数据的丢失,所以需要挂载数据卷的方式保证数据持久化。

    本镜像可以通过映射数据卷的方式来保证数据的不丢失,你可以将Redis容器默认数据存储路径/var/lib/redis映射至宿主机某个路径:

    docker run --name redis-master \
      -e REDIS=1 \
      -e REDIS_PASSWORD=password \
      -v /path/to/persistence/:/var/lib/redis/ \
      -p 6379:6379 \
      bclinux/redis
    

    或者使用Docker Compose方式:

    version: '2'
    services:
      redis-master:
        container_name: redis-master
        restart: always
        image: bclinux/redis:latest
        hostname: master
        ports:
          - 6379:6379
        environment:
          - REDIS=1
          - REDIS_PASSWORD=password
        volumes:
          - /path/to/persistence/:/var/lib/redis
    

    使用Docker Compose

    Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。

    例如,可以通过本镜像启动一个Slave模式的Redis容器,首先创建Docker Compose配置文件docker-compose.yml,内容如下:

    version: '2'
    services:
      redis-slave:
        container_name: redis-slave
        restart: always
        image: bclinux/redis:latest
        hostname: slave
        ports:
          - 6380:6379
        environment:
          - REDIS=1
          - SLAVE=1
          - SLAVE_MASTER_HOST=<IP>
          - SLAVE_MASTER_PASSWORD=password
    

    启动容器就可以直接通过如下命令启动:

    docker-compose up -d
    

    样例配置

    • 设定服务初始密码

    可以传递环境变量REDIS_PASSWORD的值来设定Redis服务初始密码:

    docker run --name redis -e REDIS_PASSWORD=password123 bclinux/redis:latest
    
    • 搭建 Replication 集群模式

    关于 Replication 集群模式定义可以参考官方文档,在Replication 集群模式中,允许一个主节点及多个从节点,从节点可配置为‘只读’模式。

    首先搭建Replication主节点:

    # docker run --name redis-master \
     -e REDIS=1 \
     -e REDIS_PASSWORD=password \
     bclinux/redis
    

    接下来搭建Replication从节点:

    # docker run --name redis-slave \
     --link redis-master:master \
     -e REDIS=1 \
     -e REDIS_PASSWORD=password \
     -e SLAVE=1 \
     -e SLAVE_MASTER_HOST=master \
     -e SLAVE_MASTER_PORT=6379 \
     -e SLAVE_MASTER_PASSWORD=password \
     bclinux/redis
    

    使用Docker Compose方式:

    version: '2'
        
    services:
     redis-primary:
       image: 'bclinux/redis'
       ports:
         - '6379'
       environment:
         - REDIS=1
         - REDIS_PASSWORD=password
       volumes:
         - '/path/to/persistent:/var/lib/redis'
        
     redis-secondary:
       image: 'bclinux/redis'
       ports:
         - '6379'
       depends_on:
         - redis-primary
       environment:
         - REDIS=1
         - REDIS_PASSWORD=password
         - SLAVE=1
         - SLAVE_MASTER_HOST=redis-primary
         - SLAVE_MASTER_PASSWORD=password
        
    

    通过scale参数可以弹性增加/减少从节点数量,例如下面命令将从节点数量增加到3个,当然也可以用同样的方法减少从节点数量:

    docker-compose scale redis-primary=1 redis-secondary=3
    

    查看日志

    本Redis镜像日志都是重定向到标准输出stdout,查看方式如下:

    [root@workstation ~]# docker logs b66b73e7a15
                    _._
               _.-``__ ''-._
          _.-``    `.  `_.  ''-._           Redis 3.2.1 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._
     (    '      ,       .-`  | `,    )     Running in standalone mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
     |    `-._   `._    /     _.-'    |     PID: 1
      `-._    `-._  `-./  _.-'    _.-'
     |`-._`-._    `-.__.-'    _.-'_.-'|
     |    `-._`-._        _.-'_.-'    |           http://redis.io
      `-._    `-._`-.__.-'_.-'    _.-'
     |`-._`-._    `-.__.-'    _.-'_.-'|
     |    `-._`-._        _.-'_.-'    |
      `-._    `-._`-.__.-'_.-'    _.-'
          `-._    `-.__.-'    _.-'
              `-._        _.-'
                  `-.__.-'
    ...
    

    或者使用Docker Compose:

    [root@workstation ~]# docker-compose logs redis-primary
    Attaching to root_redis-primary_1
    redis-primary_1    |                 _._
    redis-primary_1    |            _.-``__ ''-._
    redis-primary_1    |       _.-``    `.  `_.  ''-._           Redis 3.2.1 (00000000/0) 64 bit
    redis-primary_1    |   .-`` .-```.  ```\/    _.,_ ''-._
    redis-primary_1    |  (    '      ,       .-`  | `,    )     Running in standalone mode
    redis-primary_1    |  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
    redis-primary_1    |  |    `-._   `._    /     _.-'    |     PID: 1
    redis-primary_1    |   `-._    `-._  `-./  _.-'    _.-'
    redis-primary_1    |  |`-._`-._    `-.__.-'    _.-'_.-'|
    redis-primary_1    |  |    `-._`-._        _.-'_.-'    |           http://redis.io
    redis-primary_1    |   `-._    `-._`-.__.-'_.-'    _.-'
    redis-primary_1    |  |`-._`-._    `-.__.-'    _.-'_.-'|
    redis-primary_1    |  |    `-._`-._        _.-'_.-'    |
    redis-primary_1    |   `-._    `-._`-.__.-'_.-'    _.-'
    redis-primary_1    |       `-._    `-.__.-'    _.-'
    redis-primary_1    |           `-._        _.-'
    redis-primary_1    |               `-.__.-'
    redis-primary_1    |
    redis-primary_1    | 1:M 25 May 09:44:15.471 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is
     set to the lower value of 128.
    redis-primary_1    | 1:M 25 May 09:44:15.496 # Server started, Redis version 3.2.1
    ...
    

    配置说明

    • 默认配置参数:
    类型 默认值
    Redis端口 6379
    Sentinel端口 26379
    数据路径 /var/lib/redis
    日志路径 /var/log/redis
    Unix Socket /var/run/redis/redis.sock
    • Redis环境变量:
    环境变量 默认值 描述
    REDIS 1 / true 开启Redis主服务
    REDIS_TIMEOUT 0 断开连接如果客户端在N秒内没有响应
    REDIS_KEEPALIVE 300 TCP keepalive
    REDIS_DATABASES 16 数据库数目
    RREDIS_DATA /var/lib/redis 数据默认存储路径
    REDIS_PASSWORD - Redis密码
    REDIS_MAXCLIENTS 10000 客户端最多连接数
    REDIS_MIN_SLAVES_TO_WRITE 1 主节点会在从节点连接数少于N个,延迟低于M秒时拒绝写
    REDIS_MIN_SLAVES_MAX_LAG 10 主节点会在从节点连接数少于N个,延迟低于M秒时拒绝写
    • Slave环境变量
    环境变量 默认值 必要 描述
    SLAVE 0 - 标记Redis从节点
    SLAVE_MASTER_HOST - Redis主节点IP地址
    SLAVE_MASTER_PORT 6379 Redis主节点端口
    SLAVE_MASTER_PASSWORD - Redis主节点密码