最近参照浙江大学SEL实验室所著的《Docker容器与容器云》体验了一把使用Docker构建Django+Redis+HAProxy应用栈。由于包括docker的以上几种软件持续更新的原因,按照原书中一些步骤是无法得出期望结果的,解决问题后作此记录备查。
以下步骤需要对照原书内容参看。
目录
应用栈架构
应用栈包含6个docker容器节点,3个Redis数据库节点,1主2从;2个Django应用节点和1个HAProxy节点。
首先pull所需的docker镜像:django, redis及haproxy。由于众所周知的原因,需要使用国内容器厂商的镜像加速功能,这里使用daocloud的镜像加速
$ docker pull django
$ docker pull redis
$ docker pull haproxy
镜像获取到之后如果按照书上步骤立即启动容器会导致后续工作比较麻烦。这是因为需要在host环境下修改配置文件并映射到容器中相应的文件夹,先作好配置文件的准备再使用正确的Volumes映射参数来启动容器才容易得到预期的结果。
Redis主从服务的搭建
原书中给出的redis容器启动命令应该是遗漏了数据卷映射的参数”-v /data”,所以后面如果使用docker inspect --format "{
{ .Volumes }} <container id>
命令去查看映射/data到host的/var/lib/docker下哪个文件夹时会出错。加了“-v /data”映射后使用上述命令仍然查看不到/data数据卷映射的位置。
原书的意图是通过数据卷把redis.conf配置文件拷进容器内供启动redis-server使用,所以可以直接把host的/etc/redis/redis.conf映射入容器。
首先在host安装一个redis,得到redis.conf模板
$sudo apt-get install redis-server
然后编辑/etc/redis/redis.conf文件,分成两个版本,一个redis-master.c