该文是docker redis主从配置 正式部署的前言。如下会简要列出目录,需要了解的前置知识,以防配置时出错。
如果你还不够了解,就阅读正文的相应章节。
- image是多个read layer的堆叠
- 而container是在image上添加一层read-write layer。了解docker持久化:docker volume和bind mount
- docker volume是推荐的持久化方法,以单个volume文件存储,易于移植。
- bind mount是将宿主机的目录挂载到容器目录下,易于在宿主机操作。了解docker网络机制:host和bridge
- host可将容器的网络空间与宿主机绑定。
- bridge(默认)可用网桥将各个容器与宿主机连接。安装docker并顺利拉取镜像学会使用docker GUI: Kitematic理解redis部署
这一章没有什么可讲的,关于镜像和容器的拉取、删除等操作,可自行查阅,无需赘谈。
记录一个操作,查看各个image、container的容量:
docker system df -v
容器只是在镜像上覆盖一层read layer,任何修改都在改层上进行。
但有时候,我们想对容器的数据进行持久化,甚至想要将其迁移到其它容器内。比如,将一个容器内的数据库进行备份,复制到另一个机器,挂载到容器中使用,就要使用持久化了。
有三种可以对容器数据进行持久化,如下图所示:
在redis的DockerFile中,用到了
VOLUME /data
,创建一个卷,并挂载到/data
上。
如果想要进行迁移,可参考Docker中Image、Container与Volume的迁移
docker volume prune
。该命令只会删除"无主"的volume,若某volume所挂载的容器处于关闭状态,并不会被删除。查看容器使用volume的情况: 可以运行
docker inspect -f "{{.Mounts}}" {container}
,其中{container}为容器的名字或id。 输出案例如下:VOLUME /data
: dockerHub的redis官方给出的DockerFile中有一句VOLUME /data
,表示创建一个volume并挂载到/data
目录。
docker有四种网络模式:bridge、host、container、none。在本次部署中,只用到默认的bridge模式,其它模式可查阅docker之网络配置。
最左边的容器为host模式,右边两个容器为bridge模式
172.17.0.x
。127.0.0.1
是回环地址,只是指向容器自身,不能访问到宿主机。在正式部署集群时,我们需要在主服务器容器中先运行ifconfig
查看它的ip,这样此ip才能被从服务器识别。在从服务器的redis.config
中,slaveof {ip} 6379
一行中的{ip}就是填写此ip。
root@a2682b89400a:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
...
collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
...
collisions 0
172.17.0.2
就是容器的私有ip,宿主机上的其它容器可通过该ip相互识别,从服务器的容器可用此类ip找到主服务器的容器。127.0.0.1
指向自己。windows安装docker的步骤比较简单,百度即可。
值得一提的是,安装过程中docker可能会请求创建账户,一路同意即可,否则可能报错。
https://registry.docker-cn.com
设置镜像。在部署中,我们需要将宿主机的redis.conf
配置映射到容器中,供redis服务器启动使用。
假设这些配置文件在d盘,我们就要将d盘共享。操作如下:
右键docker图标->settings->shared drives->在d盘处打钩->点击apply
docker可能会请求操作d盘的权限,之后需要你输入账户密码(如果没有就设置一个),一并照做即可。
建议安装docker的GUI,Kitematic。它有很多实用的功能,能简化你很多工作,比如运行shell、绑定容器端口到宿主机上,等等。
安装方法:右键docker图标->单击Kitematic,按照指示操作即可。
这里贴出两张效果图:
我们可以参阅docker redis官方给出的指令来运行。在主从配置中,需要自己定义redis.conf
来配置,所以官网的这一条命令会有用:
docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
/myredis/conf/redis.conf
映射到容器的/usr/local/etc/redis/redis.conf
中,然后redis-server /usr/local/etc/redis/redis.conf
会调用配置文件。redis.conf
**,你用以上命令可以顺利完成主从配置,但可能会看见"WARNING"。在正式部署中会讲解决方法,也就是该命令需要加一些别的参数。命令中的
-v
参数会把宿主机的文件或目录挂载到容器中。由于是挂载,不是拷贝,每次容器重启时,该文件/目录需要正确存在路径上。如果路径上不存在文件/目录,docker会创建一个空的端点,让其顺利运行。