Files
redis/README.md
T
2020-07-30 15:24:52 +08:00

169 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Redis
针对 [Redis](https://redis.io) 应用的 Docker 镜像,用于提供 Redis 服务。
详细信息可参照:[官方说明](https://redis.io/documentation)
![redis-white](img/redis-white.png)
**版本信息:**
- 6.0、6.0.6、latest
- 5.0、5.0.8
**镜像信息:**
* 镜像地址:colovu/redis:latest
## TL;DR
Docker 快速启动命令:
```shell
$ docker run -d --name redis colovu/redis:latest
```
Docker-Compose 快速启动命令:
```shell
$ curl -sSL https://raw.githubusercontent.com/colovu/docker-redis/master/docker-compose.yml > docker-compose.yml
$ docker-compose up -d
```
---
## 默认对外声明
### 端口
- 6379:Redis 业务客户端访问端口
- 26379Redis Sentinel 端口
### 数据卷
镜像默认提供以下数据卷定义,默认数据分别存储在自动生成的应用名对应`redis`子目录中:
```shell
/srv/data # Redis 数据文件,主要存放Redis持久化数据;自动创建子目录redis
/srv/datalog # Redis 数据操作日志文件;自动创建子目录redis
/srv/conf # Redis 配置文件;自动创建子目录redis
/var/log # 日志文件,日志文件名为:redis.log
/var/run # 进程运行PID文件,PID文件名为:redis_6379.pid、redis_sentinel.pid
```
如果需要持久化存储相应数据,需要**在宿主机建立本地目录**,并在使用镜像初始化容器时进行映射。宿主机相关的目录中如果不存在对应应用 Redis 的子目录或相应数据文件,则容器会在初始化时创建相应目录及文件。
## 容器配置
在初始化 Redis 容器时,如果没有预置配置文件,可以在命令行中设置相应环境变量对默认参数进行修改。类似命令如下:
```shell
$ docker run -d -e "REDIS_AOF_ENABLED=no" --name redis colovu/redis:latest
```
### 常规配置参数
常使用的环境变量主要包括:
- **ALLOW_EMPTY_PASSWORD**:默认值:**no**。设置是否允许无密码连接。如果没有设置`REDIS_PASSWORD`,则必须设置当前环境变量为 `yes`
- **REDIS_PASSWORD**:默认值:**无**。客户端认证的密码
- **REDIS_DISABLE_COMMANDS**:默认值:**无**。设置禁用的 Redis 命令
- **REDIS_AOF_ENABLED**:默认值:**yes**。设置是否启用 Append Only File 存储
### 可选配置参数
如果没有必要,可选配置参数可以不用定义,直接使用对应的默认值,主要包括:
- **ENV_DEBUG**:默认值:**false**。设置是否输出容器调试信息。可设置为:1、true、yes
- **REDIS_PORT**:默认值:**6379**。设置应用的默认客户访问端口
- **REDIS_PASSWORD_FILE**:默认值:**无**。以绝对地址指定的客户端认证用户密码存储文件。该路径指的是容器内的路径
- **REDIS_MASTER_PASSWORD_FILE**:默认值:**无**。以绝对地址指定的服务器密码存储文件。该路径指的是容器内的路径
### Sentinel配置参数
- **REDIS_SENTINEL_HOST**:默认值:**无**
- **REDIS_SENTINEL_MASTER_NAME**:默认值:**无**
- **REDIS_SENTINEL_PORT_NUMBER**:默认值:**26379**。设置 Sentinel 默认端口
### 集群配置参数
使用 Redis 镜像,可以很容易的建立一个 [redis](https://redis.apache.org/doc/r3.1.2/redisAdmin.html) 集群。针对 redis 的集群模式(复制模式),有以下参数可以配置:
- **REDIS_REPLICATION_MOD**:默认值:**无**。当前主机在集群中的工作模式,可使用值为:`master`/`slave`/`replica`
- **REDIS_MASTER_HOST**:默认值:**无**。作为`slave`/`replica`时,对应的 master 主机名或 IP 地址
- **REDIS_MASTER_PORT_NUMBER**:默认值:**6379**。master 主机对应的端口
- **REDIS_MASTER_PASSWORD**:默认值:**无**。master 主机对应的登录验证密码
### TLS配置参数
使用证书加密传输时,相关配置参数如下:
- **REDIS_TLS_ENABLED**:启用或禁用 TLS。默认值:**no**
- **REDIS_TLS_PORT**:使用 TLS 加密传输的端口。默认值:**6379**
- **REDIS_TLS_CERT_FILE**TLS 证书文件。默认值:**无**
- **REDIS_TLS_KEY_FILE**TLS 私钥文件。默认值:**无**
- **REDIS_TLS_CA_FILE**TLS 根证书文件。默认值:**无**
- **REDIS_TLS_DH_PARAMS_FILE**:包含 DH 参数的配置文件 (DH 加密方式时需要)。默认值:**无**
- **REDIS_TLS_AUTH_CLIENTS**:配置客户端是否需要 TLS 认证。 默认值:**yes**
当使用 TLS 时,则默认的 non-TLS 通讯被禁用。如果需要同时支持 TLS 与 non-TLS 通讯,可以使用参数`REDIS_TLS_PORT`配置容器使用不同的 TLS 端口。
## 安全
### 用户及密码
Redis 镜像默认禁用了无密码访问功能,在实际生产环境中建议使用用户名及密码控制访问;如果为了测试需要,可以使用以下环境变量启用无密码访问功能:
```shell
ALLOW_EMPTY_PASSWORD=yes
```
通过配置环境变量`REDIS_PASSWORD`,可以启用基于密码的用户认证功能。命令行使用参考:
```shell
$ docker run -d -e REDIS_PASSWORD=colovu colovu/redis:latest
```
使用 Docker-Compose 时,`docker-compose.yml`应包含类似如下配置:
```yaml
services:
redis:
...
environment:
- REDIS_PASSWORD=colovu
...
```
### 容器安全
本容器默认使用应用对应的运行时用户及用户组运行应用,以加强容器的安全性。在使用非`root`用户运行容器时,相关的资源访问会受限;应用仅能操作镜像创建时指定的路径及数据。使用`Non-root`方式的容器,更适合在生产环境中使用。
## 注意事项
- 容器中 Redis 启动参数不能配置为后台运行,只能使用前台运行方式,即:`daemonize no`
----
本文原始来源 [Endial Fang](https://github.com/colovu) @ [Github.com](https://github.com)