搭建docker应用栈python
操做系统: ubuntu 16.04.1 LTS 桌面版redis
1. 准备工做docker
换网易源, gedit 会报一个metadata的告警, 不用理会, sudo apt-get update, sudo apt-get upgrade 以后就修复了数据库
2. 安装docker并启动docker daemondjango
sudo apt-get install apt-transport-https ca-certificates sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D sudo apt-get update sudo apt-get install docker-engine sudo service docker start
3. 获取应用栈各节点所需镜像ubuntu
sudo docker pull ubuntu sudo docker pull django sudo docker pull haproxy sudo docker pull redis #获取特定版本 sudo docker pull redis:3.0.6
4. 应用栈容器节点启动vim
# 启动redis容器 sudo docker run -it --name redis-master redis /bin/bash sudo docker run -it --name redis-slave1 --link redis-master:master redis /bin/bash sudo docker run -it --name redis-slave2 --link redis-master:master redis /bin/bash # 启动django容器 sudo docker run -it --name APP1 --link redis-master:db -v ~/Projects/Django/App1:/usr/src/app django /bin/bash sudo docker run -it --name APP2 --link redis-master:db -v ~/Projects/Django/App2:/usr/src/app django /bin/bash # 启动haproxy容器 sudo docker run -it --name HAProxy --link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v ~/Projects/HAProxy:/tmp haproxy /bin/bash
5. redis master 主数据库容器节点配置bash
sudo docker inspect --format "{{ .Volumes }}" bc8e
报错以下: Template parsing error: template: :1:2: executing "" at <.Volumes>: map has no entry for key "Volumes"app
有建议使用 {{ .Config.Volumes }}测试
sudo docker inspect --format "{{ .Config.Volumes }}" bc8e
输出 map[/data:{}]
grep大法好
sudo docker inspect bc8e | grep Source
"Source": "/var/lib/docker/volumes/xxxxxxx/_data"
以后须要 root 权限, ubuntu 的 sudo cd 会报错, 由于 cd 是 alias
sudo -s cd /var/lib/docker/volumes/xxxxxxx/_data cp 你的redis文件夹/redis.conf . vim redis.conf
须要修改如下参数
# bind 是必需要改的, 不然 slave 会找不到 master, 默认是 127.0.0.1 bind 0.0.0.0
切换到容器中
# /var/lib/redis 这个文件夹必须建立 mkdir /var/lib/redis cd /data cp redis.conf /usr/local/bin cd /usr/local/bin redis-server redis.conf
6. redis slave 从数据库容器节点的配置
redis.conf的修改项
slaveof master 6379
启动方式相同
7. redis 数据库容器节点测试
master
# redis-cli 127.0.0.1:6379> set master bc8e OK 127.0.0.1:6379> get master "bc8e"
slave
# redis-cli 127.0.0.1:6379> get master "bc8e"
info 能够检查目前redis状态, /var/log/redis/redis.log 能够查看日志信息, 若是master的数据没有同步到 slave, 能够利用日志协助排错.
8. APP容器节点的配置
按照书中流程来便可, 直到 python manage.py syncdb 会报错, 由于已经没有这个命令了, 须要执行的是 python manage.py createsuperuser
9. HAProxy 容器节点的配置
# 会报错
listen redis_proxy 0.0.0.0:6301
# 须要修改以下 listen redis_proxy bind 0.0.0.0:6301
10. 应用栈访问测试
原书的 http://172.17.0.9 是个迷之地址, 换成 http://127.0.0.1 或 http://localhost 可破.