第三节:在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 创建宿主机目录结构

 在宿主机上创建 /root/redis 目录及其子目录,用于存放 Redis 的配置文件、数据文件和日志文件
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】

 
  • chown -R 999:999 /root/redis/logs:将 /root/redis/logs 目录及其所有子目录和文件的所有者和所属组都修改为 ID 为 999 的用户和组。
  • chmod -R 755 /root/redis/logs:将 /root/redis/logs 目录及其所有子目录和文件的权限设置为 755,即所有者具有读、写、执行权限,组用户和其他用户具有读、执行权限。

 

在宿主机 /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
参数解释:
  • -d:让容器以守护进程模式在后台运行。
  • --name ypf_redis5:为容器指定名称为 ypf_redis5
  • -p 6379:6379:将宿主机的 6379 端口映射到容器的 6379 端口,以便从宿主机访问 Redis 服务。
  • -v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:将宿主机的 redis.conf 配置文件挂载到容器的 /usr/local/etc/redis/redis.conf 路径,使容器使用该配置。
  • -v /root/redis/data:/data:将宿主机的 data 目录挂载到容器的 /data 路径,实现数据文件同步。
  • -v /root/redis/logs:/var/log/redis:将宿主机的 logs 目录挂载到容器的 /var/log/redis 路径,实现日志文件同步。
  • redis:5.0 redis-server /usr/local/etc/redis/redis.conf:指定使用 Redis 5.0 镜像,并以指定的配置文件启动 Redis 服务器

如果不需要目录映射,只是最简单的绑定, 有无密码如下

【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】 

  • /root/nginx/conf:用于存放 Nginx 的配置文件。
  • /root/nginx/html:用于存放项目文件。
  • /root/nginx/logs:用于存放 Nginx 的日志文件。

 

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 容器

 使用 docker run 命令创建并启动 Nginx 容器,同时挂载配置文件和项目目录,绑定端口:
docker run -d \
--name ypf_nginx \
-p 8055:80 \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/logs:/var/log/nginx \
nginx
参数解释:
  • -d:让容器以守护进程模式在后台运行。
  • --name ypf_nginx:为容器指定名称为 ypf_nginx
  • -p 8055:80:将宿主机的 8055 端口映射到容器的 80 端口。
  • -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将宿主机的 nginx.conf 配置文件挂载到容器的 /etc/nginx/nginx.conf 路径。
  • -v /root/nginx/html:/usr/share/nginx/html:将宿主机的 html 目录挂载到容器的 /usr/share/nginx/html 路径。
  • -v /root/nginx/logs:/var/log/nginx:将宿主机的 logs 目录挂载到容器的 /var/log/nginx 路径,实现日志文件同步。

 

5. 创建测试用的项目文件

  在 /root/nginx/html 目录下创建 index.html 文件,并添加内容:
echo "welcome to nginx" > /root/nginx/html/index.html

 

6. 验证访问

  在浏览器中访问 http://<宿主机 IP 地址>:8055,或者使用 curl 命令在终端中验证

  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 目录以及其下的 conflogs 和 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
参数解释如下:
  • -d:让容器在后台以守护进程模式运行。
  • --name ypf_mysql57:为容器指定名称为 ypf_mysql57
  • -p 3306:3306:将容器内部的 3306 端口映射到宿主机的 3306 端口,以便外部可以访问 MySQL 服务。(第1个3306表示linux系统的端口)
  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 的 root 用户密码为 123456。
  • -v /root/mysql/conf/my.cnf:/etc/mysql/my.cnf:将宿主机的 my.cnf 配置文件挂载到容器的 /etc/mysql/my.cnf 路径,使容器使用该配置文件。
  • -v /root/mysql/logs:/var/log/mysql:将宿主机的 logs 目录挂载到容器的 /var/log/mysql 路径,实现日志文件的同步。
  • -v /root/mysql/data:/var/lib/mysql:将宿主机的 data 目录挂载到容器的 /var/lib/mysql 路径,实现数据文件的同步。

 

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
参数解释如下:
  • -d:让容器以守护进程模式在后台运行。
  • --name ypf_mysql8-container:为容器指定名称为 ypf_mysql8
  • -p 3306:3306:将容器的 3306 端口映射到宿主机的 3306 端口,以便从宿主机访问 MySQL 服务。
  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 的 root 用户密码为 123456。
  • -v /root/mysql8/conf/my.cnf:/etc/mysql/my.cnf:将宿主机的 my.cnf 配置文件挂载到容器的 /etc/mysql/my.cnf 路径,使容器使用该配置。
  • -v /root/mysql8/logs:/var/log/mysql:将宿主机的 logs 目录挂载到容器的 /var/log/mysql 路径,实现日志文件同步。
  • -v /root/mysql8/data:/var/lib/mysql:将宿主机的 data 目录挂载到容器的 /var/lib/mysql 路径,实现数据文件同步。
  • -v /root/mysql8/mysql-files:/var/lib/mysql-files:将宿主机的 mysql-files 目录挂载到容器的 /var/lib/mysql-files 路径,解决 --secure-file-priv 目录问题。

 

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 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

 

posted @ 2020-09-08 07:05  Yaopengfei  阅读(1557)  评论(13)    收藏  举报