一、环境搭建
1、docker安装,请参考阿里云开发者社区镜像安装。可在阿里云开发者社区中查找或打开下面地址:https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.12f01991aHmnyd
2、redis镜像下载,可从阿里云镜像库或Docker Hub镜像库下载,执行命令docker pull redis即可下载,如下图所示,
下载好redis镜像后,就可以用docker run -d -p 6379:6379 --name docker-redis redis启动一个redis容器,下载搭建一个1主1从的redis服务。
二、Redis Docker容器
这里搭建1主1从的redis服务(需要的话也可以搭建多个从服务器),因此需要启动两个redis docker容器,从服务器连接到主服务器中。
1、准备redis容器
docker run -it --name docker-redis-master --mount type=bind,source=/home/leesia/docker/redis/v,target=/leesia redis /bin/bashdocker run -it --name docker-redis-slave1 --mount type=bind,source=/home/leesia/docker/redis/v,target=/leesia --link docker-redis-master:master redis /bin/bash
命令说明:
第一条命令是启动主服务容器,容器名为docker-redis-master,mount 参数挂载了宿主机的/home/leesia/docker/redis/v到容器的/leesia目录,宿主机的/home/leesia/docker/redis/v目录必须存在,否则会报错,可以参考--mount参数配置。/bin/bash是容器启动时进入伪终端。
第二条命令是启动从服务容器,容器名为docker-redis-slave1,同样挂载了宿主机的/home/leesia/docker/redis/v到容器的/leesia目录。link参数是连接到其他容器,这里连接到主服务容器docker-redis-master,并设置别名为master。 /bin/bash是容器启动时进入伪终端。
分别执行这两个命令,可启动redis容器,并进入容器。在容器中按ctrl+p,再ctrl+q可从容器退出,并保持容器继续运行,退出后用执行docker exec -it container_id /bin/bash再次进入容器。
启动主服务容器:
启动从服务容器:
注意:这两条命令执行后只是启动了两个容器,容器中的redis服务并没有启动。可以通过docker ps查看启动的容器信息。也可以通过docker inspect命令查看容器的详情信息,也可以通过docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_id 命令查看两个容器的IP,容器IP在redis的配置文件中会用到。执行该命令后,可返回主服务容器和从服务容器的IP。
docker ps查看容器信息:
docker inspect查看容器IP信息:
这里可以看到主从服务容器的IP分别为172.17.0.2和172.17.0.4。
2、配置redis
redis的配置文件为redis.conf,但是redis镜像中并不包含该文件,所以需要手工将宿主机的redis.conf文件配置到redis容器中。可以将该文件复制到/home/leesia/docker/redis/v目录里,还记得启动redis容器的mount参数吗,复制后,即可以在容器中的/leesia目录下看到redis.conf文件。
将/home/leesia/docker/redis/v目录下的redis.conf文件再复制一份,并将两文件重命名为redis-master.conf和redis-slave.conf,分别表示主服务容器的配置文件和从服务容器的配置文件。
在宿主机中查看/home/leesia/docker/redis/v:
在容器里查看/leesia目录,看到的内容和宿主机上的一样的:
由于容器里没有vim编辑器,因此可以在宿主机中分别修改这两个文件,配置项如下:
redis-master.conf
port 6379
bind 172.17.0.2
daemonize yes
redis-slave.confport 6379
bind 172.17.0.4
daemonize yes
slaveof master 6379
配置文件说明:port表示redis的端口,bind表示容器的IP,还记得上面用docker inspect命令查看docker容器的IP吗,就在这里用到了,slaveof master 6379表示从服务器,master为主服务容器的别名,在从服务容器的启动命令中连接主服务定义了别名,这里也可以用主服务容器的IP 172.17.0.2。
将修改好的两个文件分别复制到主从容器的/usr/local/bin目录下,并命名为redis.conf。
复制到主服务容器中:
复制到从服务容器中:
其他redis配置文件
在容器的/var/lib目录下创建redis目录;在/var/log目录下创建redis目录,并在新建的redis目录下创建redis-server.log日志文件。主从服务容器中都需要。
3、启动redis服务
分别在主从容器的/usr/local/bin目录下执行redis-server redis.conf命令,启动redis服务。这样,redis主从服务器已经搭建。
启动主服务:
启动从服务:
三、验证
在主服务容器的/usr/local/bin目录下执行redis-cli -h 172.17.0.2 -p 6379,连接redis服务,执行set master 'master',存入一个master键。
在从服务容器的/usr/local/bin目录下执行redis-cli -h 172.17.0.4 -p 6379,连接redis服务,执行get master,返回'master',说明主服务器将数据同步到了从服务器中。
好了,这样就搭建了一个1主1从的redis服务器