第三节:在docker容器中安装Redis、Redis-Bloom(布隆过滤器)、Nginx、MySQL(5.7和8.0)
一. 部署Redis
要求:
在 Docker 中安装 Redis 5.0 版本,并将配置文件、数据文件、日志文件分别挂载到 /root/redis/ 目录下,设置密码为 123456,启动 AOF 和 RDB 混合持久化模式,采用 LFU 缓存淘汰策略的详细步骤
1. 去 https://hub.docker.com/ 中搜索Redis镜像,查看相关版本

2. 下载5.0版本的镜像
【docker pull redis:5.0】
3 创建宿主机目录结构
mkdir -p /root/redis/conf /root/redis/data /root/redis/logs
补充:
日志文件需要权限,所以需要执行下面指令,如果不映射logs文件夹,可以不需要执行。
确保宿主机上 /root/redis/logs 目录的权限设置允许 Redis 容器内的进程进行写入操作。通常,Redis 容器内的进程以特定的用户和组运行,在 Redis 官方镜像中,默认的用户和组 ID 可能为 999。可以通过以下命令修改目录权限:
【sudo chown -R 999:999 /root/redis/logs】
【sudo chmod -R 755 /root/redis/logs】
在宿主机 /root/redis/conf 目录下新建redis的配置文件 redis.conf,内容如下
【touch redis.conf】
# 设置 Redis 密码
requirepass 123456
# 启用 AOF 和 RDB 混合持久化模式
appendonly yes
aof-use-rdb-preamble yes
# 设置 LFU 缓存淘汰策略
maxmemory-policy allkeys-lfu
# 日志文件路径
logfile "/var/log/redis/redis.log"
# 数据文件保存目录
dir /data
4. 构建容器,并做端口映射
docker run -d \
--name ypf_redis5 \
-p 6379:6379 \
-v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /root/redis/data:/data \
-v /root/redis/logs:/var/log/redis \
redis:5.0 redis-server /usr/local/etc/redis/redis.conf
如果不需要目录映射,只是最简单的绑定, 有无密码如下
【docker run -id --name=myredis -p 6379:6379 redis:5.0 redis-server --requirepass "123456"】
【docker run -id --name=myredis -p 6379:6379 redis:5.0 】
5. 客户端测试

6. 指令测试
运行【docker exec -it ypf_redis5 redis-cli -a 123456】,然后进行【CONFIG GET requirepass】 查看密码、【CONFIG GET maxmemory-policy】查看缓存淘汰策略

二. 安装Redis-Bloom(布隆过滤器)
前置说明:
(1) 从redis4.0开始,布隆过滤器都是以模块的形式存在,需要单独安装;本质上编译后就是一个 redisbloom.so 文件,最终在redis.conf文件加载一下即可。
(2) 从redis8.0开始,内置了布隆过滤器,不需要单独安装了。
部署要求:
(1) 在 Docker 中安装 Redis Bloom 版本,并将配置文件、数据文件、日志文件分别挂载到 /root/redis/ 目录下,设置密码为 123456,启动 AOF 和 RDB 混合持久化模式,采用 LFU 缓存淘汰策略的详细步骤
(2) 安装完成后,查看对应的redis版本、redis-bloom版本
安装说明:
(1) 本节的安装模式是直接使用镜像 redislabs/rebloom:latest, 这属于在已经帮我们封装好了redis环境,且内置了redis-bloom。
(2) 也可以在redis中去单独安装,即下载redis-bloom,然后编译成 redisbloom.so 文件,最后在配置文件中 loadmodule 加载一下即可,这种方式需要注意redis 和 redis-bloom的版本对应关系。(可参考 https://www.cnblogs.com/yaopengfei/p/17587045.html)
redisbloom的下载地址:https://github.com/RedisBloom/RedisBloom
1. 创建挂载目录
mkdir -p /root/redis/{conf,data,logs}
2. 创建 Redis 配置文件
特别注意:redisbloom的模块路径 和 名称, 这里的名称叫做 redisbloom.so , 也可能不叫这个名称,这里的经过进入容器后,反向找到的。
cat > /root/redis/conf/redis.conf << EOF
# 基础配置
port 6379
bind 0.0.0.0
# 设置密码
requirepass 123456
# 加载 RedisBloom 模块
loadmodule /usr/lib/redis/modules/redisbloom.so
# 持久化配置(AOF 和 RDB 混合模式)
# 900 秒内至少 1 个 key 变化时保存 RDB
save 900 1
# 300 秒内至少 10 个 key 变化时保存 RDB
save 300 10
# 60 秒内至少 10000 个 key 变化时保存 RDB
save 60 10000
# 启用 AOF
appendonly yes
# 启用混合持久化
aof-use-rdb-preamble yes
# 内存策略(LFU 淘汰)
# 所有 key 采用 LFU 淘汰策略
maxmemory-policy allkeys-lfu
# 日志配置
logfile /var/log/redis/redis-server.log
loglevel notice
EOF

3. 拉取 RedisBloom 镜像(非官方)
docker pull redislabs/rebloom:latest
4. 启动 Redis 容器
docker run -d \
--name redis-bloom \
-p 6379:6379 \
-v /root/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /root/redis/data:/data \
-v /root/redis/logs:/var/log/redis \
redislabs/rebloom:latest \
redis-server /etc/redis/redis.conf
补充:
如果需要其他映射,只需要设置密码的话,那么上述 步骤1 和 步骤2 都可以省略,直接运行下面代码,注意:必须写--loadmodule这句话,否则redis-bloom不生效
docker run -d --name redis-bloom \
-p 6379:6379 \
redislabs/rebloom:latest \
redis-server --requirepass "123456" --loadmodule /usr/lib/redis/modules/redisbloom.so
5. 查看 Redis 容器
docker ps

6. 查看 Redis 和 Redis-Bloom的版本号
【docker exec -it redis-bloom redis-cli -a 123456 INFO SERVER | grep redis_version】

【docker exec -it redis-bloom redis-cli -a 123456 MODULE LIST | grep redisbloom】
7. 测试
(1) 进入redis命令行
docker exec -it redis-bloom redis-cli -a 123456
(2). 创建布隆过滤器
# 创建布隆过滤器(容量 1000,错误率 0.1%)
BF.RESERVE mybloom 0.001 1000
(3). 添加元素
# 添加单个元素(成功返回1)
BF.ADD mybloom apple
# 批量操作(成功返回1)
BF.MADD mybloom cherry date
(4). 检查元素存在性
# 检查单个存在性
BF.EXISTS mybloom apple # 返回 1(存在)
BF.EXISTS mybloom banana # 返回 0(不存在)
# 批量检查存在性
BF.MEXISTS mybloom apple cherry grape # 返回 1,1,0
(5). 删除
# 删除布隆过滤器
DEL mybloom
(6). 其他
# 检查密码配置
CONFIG GET requirepass # 应返回 "123456"
# 检查淘汰策略
CONFIG GET maxmemory-policy # 应返回 "allkeys-lfu"
# 检查持久化配置
CONFIG GET appendonly # 应返回 "yes"
CONFIG GET aof-use-rdb-preamble # 应返回 "yes"
三. 部署Nginx
1. 下载Nginx最新镜像
【docker pull nginx】
2. 在宿主机(Linux主机)中准备对应的目录
在宿主机上创建 /root/nginx 目录及其子目录,用于存放 Nginx 的配置文件、项目文件和日志文件:
【mkdir -p /root/nginx/conf /root/nginx/html /root/nginx/logs】
3 准备Nginx所需的配置文件
在 /root/nginx/conf 目录下创建 nginx.conf 配置文件:
特别注意:下面 root /usr/share/nginx/html ,此处的路径必须写容器内的路径/usr/share/nginx/html,不能直接写挂载路径 /root/nginx/html
查看代码
cat << EOF > /root/nginx/conf/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" '
'\$status \$body_bytes_sent "\$http_referer" '
'"\$http_user_agent" "\$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
EOF
4. 创建并运行 Nginx 容器
5. 创建测试用的项目文件
echo "welcome to nginx" > /root/nginx/html/index.html
6. 验证访问
http://xx.205.120.80:8055
curl http://xx.xx.120.80:8055


四. 部署MySQL5.7 和 8.0
(一) 要求1
在docker中安装mysql5.7,密码设置为123456,需要修改配置文件为忽略大小写,然后需要绑定数据卷,将mysql的配置文件、日志文件、数据文件都同步到宿主机 /root/mysql 目录下的对应文件夹
1. 下载MySQL5.7版本镜像
【docker pull mysql:5.7】
2. 在宿主机上创建目录,用于进行数据卷挂载
在宿主机上创建 /root/mysql 目录以及其下的 conf、logs 和 data 子目录,用于存放 MySQL 的配置文件、日志文件和数据文件
【mkdir -p /root/mysql/conf /root/mysql/logs /root/mysql/data】
3. 创建配置文件
在 /root/mysql/conf 目录下创建 my.cnf 配置文件,并设置忽略大小写的参数: (下面代码直接复制到centos中即可)
cat << EOF > /root/mysql/conf/my.cnf
[mysqld]
# 忽略大小写
lower_case_table_names = 1
# 其他可选配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
EOF
4. 构建容器,并进行端口映射和目录挂载
使用 docker run 命令创建并启动 MySQL 5.7 容器,同时设置密码、挂载数据卷和配置文件
docker run -d \
--name ypf_mysql57 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /root/mysql/logs:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
mysql:5.7

5. 使用客户端进行连接
链接成功

6. 在centos系统中登录,并验证
(1) 运行指令
【docker exec -it ypf_mysql57 mysql -u root -p】 然后输入密码:123456
(2) 输入指令
【SHOW VARIABLES LIKE 'lower_case_table_names';】 返回1,表示忽略大小写配置成功

(二) 要求2
在docker中安装mysql8,密码设置为123456,需要修改配置文件为忽略大小写,然后需要绑定数据卷,将mysql的配置文件、日志文件、数据文件都同步到宿主机 /root/mysql8 目录下的对应文件夹
1. 下载MySQL8 版本镜像
【docker pull mysql:8.0】
2. 在宿主机上创建目录,用于进行数据卷挂载
在宿主机上创建 /root/mysql8 目录及其子目录,用于存放 MySQL 的配置文件、日志文件、数据文件以及 mysql-files 目录
【mkdir -p /root/mysql8/conf /root/mysql8/logs /root/mysql8/data /root/mysql8/mysql-files】
特别注意:这里和mysql5.7不同,必须创建mysql-files文件夹,然后进行挂载,否则mysql8.0无法启动。
3. 创建配置文件
在 /root/mysql8/conf 目录下创建 my.cnf 配置文件,并添加忽略大小写的配置以及可能需要的其他配置: (下面代码直接复制到centos中即可)
特别注意: 与mysql5.7的配置文件有区别
cat << EOF > /root/mysql8/conf/my.cnf
[mysqld]
# 忽略大小写
lower_case_table_names = 1
# 设置字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 使用旧的认证方式
default-authentication-plugin = mysql_native_password
# 可选:修改 secure-file-priv 路径
secure-file-priv = /var/lib/mysql-files
EOF
4. 构建容器,并进行端口映射和目录挂载
使用 docker run 命令创建并启动 MySQL 8 容器,同时设置密码、挂载数据卷和配置文件 以及 mysql-files文件
特别注意: 与mysql5.7的区别,需要额外挂载mysql-files文件
docker run -d \
--name ypf_mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql8/conf/my.cnf:/etc/mysql/my.cnf \
-v /root/mysql8/logs:/var/log/mysql \
-v /root/mysql8/data:/var/lib/mysql \
-v /root/mysql8/mysql-files:/var/lib/mysql-files \
mysql:8.0

5. 使用客户端进行连接
链接成功

6. 在centos系统中登录,并验证
(1) 运行指令
【docker exec -it ypf_mysql8 mysql -u root -p】 然后输入密码:123456
(2) 输入指令
【SHOW VARIABLES LIKE 'lower_case_table_names';】 返回1,表示忽略大小写配置成功

!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。

浙公网安备 33010602011771号