本节的目的不在于去教大家理解docker容器(讲docker就脱离了我们课程的核心,我们的课程是Spring Boot 不是docker),而是希望通过docker的方式快速的为大家搭建一个redis数据库,从而方便大家学习使用,方便学习本章后续的内容。如果你想学好docker,你应该再去学另外的课程。
如果你觉得docker安装redis对于你来说有困难,可以下载一个windows版本的redis安装,达到可以开始后续章节学习的目的即可。
准备工作
首先要安装好docker。CentOS7如何安装docker方法在本文档的番外篇里面介绍
下面的安装过程如果看不懂,回头来看这个图理解一下。
一、获取 redis 镜像
如果你不熟悉docker,可以认为docker镜像是安装包。
docker search redis
docker pull redis:5.0.5
docker images
其实更形象点的理解docker镜像和容器之间的关系,更像是Class类与对象之间的关系。一个类可以构造多个对象,一个镜像可以构造多个容器。类和镜像是实实在在存在的字节码文件;对象和容器是在系统内存里面,作为运行时状态存在。
二、创建容器
2.1.创建持久化存储目录
容器可以运行在内存里面,但是容器存储的数据需要进行持久化。所以在宿主机上创建redis 容器的数据和配置文件存储目录。
# 这里我们在 /home/docker 下创建
mkdir /home/docker/redis/{conf,data} -p
cd /home/docker/redis
注意:后面所有的操作命令都要在这个目录/home/docker/redis下进行
2.2.获取 redis 的默认配置文件模版
# 获取 redis 的默认配置模版
# 这里主要是想设置下 redis 的 log / password / appendonly
# redis 的 docker 运行参数提供了 --appendonly yes 但没 password
wget https://gitee.com/hanxt/boot-launch/raw/master/src/main/resources/otherconfig/redis.conf -O conf/redis.conf
# 直接替换编辑
sed -i 's/logfile ""/logfile "access.log"/' conf/redis.conf;
sed -i 's/# requirepass foobared/requirepass 123456/' conf/redis.conf;
sed -i 's/appendonly no/appendonly yes/' conf/redis.conf;
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' conf/redis.conf;
sed -i是linux文件替换命令,替换格式为s/被替换的内容/替换之后的内容/
替换logfile ""为logfile "access.log",指定日志文件名称为access.log
替换# requirepass foobared为requirepass 123456,指定访问密码为123456
替换“appendonly no“为”appendonly yes”,开启appendonly模式
替换绑定IP“bind 127.0.0.1”为“bind 0.0.0.0”
protected-mode 是在没有显式定义 bind 地址(即监听全网段),又没有设置密码 requirepass时,protected-mode 只允许本地回环 127.0.0.1 访问。所以改为bind 0.0.0.0
2.3.使用镜像创建一个容器
创建并运行一个名为 myredis 的容器,放到start-redis.sh脚本里面
# 创建并运行一个名为 myredis 的容器
docker run \
-p 6379:6379 \
-v $PWD/data:/data \
-v $PWD/conf/redis.conf:/etc/redis/redis.conf \
--privileged=true \
--name myredis \
-d redis:5.0.5 redis-server /etc/redis/redis.conf
# 命令分解
docker run \
-p 6379:6379 \ # 端口映射 宿主机:容器
-v $PWD/data:/data:rw \ # 映射磁盘目录 rw 为读写,宿主机目录:容器目录
-v $PWD/conf/redis.conf:/etc/redis/redis.conf:ro \ # 挂载配置文件 ro 为readonly
--privileged=true \ # 给与一些权限
--name myredis \ # 给容器起个名字
-d redis redis-server /etc/redis/redis.conf # deamon 运行容器 并使用配置文件启动容器内的 redis-server
$PWD是当前目录,也就是/home/docker/redis
2.4.查看活跃的容器
# 查看活跃的容器
docker ps
# 如果没有 myredis 说明启动失败 查看错误日志
docker logs myredis
# 查看 myredis 的 ip 挂载 端口映射等信息
docker inspect myredis
# 查看 myredis 的端口映射
docker port myredis
三、访问 redis 容器服务
安装好之后,可以进行访问测试
docker exec -it myredis bash
redis-cli
上面的测试是在宿主机内访问docker容器。如果在宿主机上可以访问到redis服务,在宿主机之外的主机无法访问该redis服务的话,可能是因为宿主机的防火墙没有打开。参考下面的做法。
四、开启防火墙端口,提供外部访问
开启docker容器所在的宿主机端口,提供给外部服务进行访问
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
firewall-cmd --query-port=6379/tcp