docker应用栈(续)
阅读《docker容器与容器云》笔记,docker应用栈续,继续前章节,记录后续django应用、haproxy的配置。
操作&设置
插播一段容器的启动,在操作过程中,可能不小心关掉了容器或者关闭容器交互命令行(使得容器在后台运行),
通过如下方式可重现命令交互窗口。
容器已关闭
# 启动容器交互、命令行 docker start -it [容器名] /bin/bash
容器后台运行
# 切换后台运行容器至命令行交互 docker exec -it [容器名] /bin/bash
Vim编辑Tab 4空格设置
# vim 打开文件 vim /etc/vim/vimrc # 在末尾三行添加 set ts=4 set expandtab set autoindent
APP容器节点(django)配置
django容器启动后,通过django框架搭建简答的web应用。为了访问数据库,django框架中需添加Python语言的Reids支出包。命令: pip install redis
支持包安装完成后:
在容器
/usr/src/app
目录下创建app# 容器内 cd /usr/src/app mkdir dockerapp cd dockerapp django-admin.py startproject redisweb cd redisweb python manage.py startapp helloworld
在主机内配置编辑app
# 主机内 cd ~/Projects/Django/App1 # 容器/usr/src/app挂载目录 # 工程目录 cd dockerweb/redisweb/helloworld/ sudo -s # root 权限修改views.py vim settings.py # 编辑视图文件
视图文件views.py
from django.shortcuts import render from django.http import HttpResponse # Create your views here. import redis def hello(request): str=redis.__file__ str+="<br>" r = redis.Redis(host='db', port=6379, db=0) info = r.info() str+=("Set Hi <br>") r.set('Hi', 'HelloWorld-App1') str+=("Get Hi: %s <br>" % r.get('Hi')) str+=("Redis Info: <br>") str+=("Key: Info Value") for key in info: str+=("%s: %s <br>" % (key, info[key])) return HttpResponse(str)
应用helloworld注册
# 编辑 setting.py 文件 (主机内) cd ../redisweb vim setting.py
# setting.py 文件部分内容 ALLOWED_HOSTS = ['*'] # 允许主机 # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'helloworld', # 注册helloworld应用 ]
设置路由
from django.conf.urls import url from django.contrib import admin from helloworld.views import hello # 引入视图 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^helloworld$',hello), # 添加路由 ]
再次进入容器
# 容器内 cd /usr/src/app/dockerweb/redisweb python manage.py makemigrations python manage.py migrate # 启动 python manage.py runserver 0.0.0.0:8001 # APP1
APP2 和 APP1 同样配置(视图输出的字符有稍微区别)
HAproxy容器节点的配置
主机挂载目录编辑配置文件(haproxy.cfg)
global log 127.0.0.1 local0 # 日志输出配置,所有日志都记录在本机,通过local0输出 maxconn 4096 # 最大连接数 chroot /usr/local/sbin # 改变当前工作目录 daemon # 以后台形式运行HAProxy nbproc 4 # 启动4个HAProxy实例 pidfile /usr/local/sbin/haproxy.pid # pid文件位置 defaults log 127.0.0.1 local3 # 日志文件的输出定向 mode http # {tcp|http|health} 设定启动实例的协议类型 option dontlognull # 保证HAProxy不记录上级负载均衡发送过来的用于检查状态没有数据的心跳包 option redispatch # 当serverId对应的服务器挂掉后,强制定向到其他健康服务器 retries 2 # 重试两次链接失败就认为服务器不可用,主要通过后面的check检查 maxconn 2000 # 最大连接数 balance roundrobin # balance有连个可用选项,roundrobin和source,其中,roundrobin表示 # 轮循,而source表示HAP荣幸也不采用轮循的策略,而是把来自某个IP的请求转发 # 给一个固定的IP的后端 timeout connect 5000ms # 连接超时时间 timeout client 5000ms # 客户端连接超时时间 timeout server 5000ms # 服务器端连接超时时间 listen redis_proxy bind 0.0.0.0:6301 # 添加绑定 ############################ bind-process 2 # 绑定处理 ############################ stats enable stats uri /haproxy-stats server APP1 APP1:8001 check inter 2000 rise 2 fall 5 # 你的均衡节点 server APP2 APP2:8002 check inter 2000 rise 2 fall 5
容器内设置配置文件
# 容器内 cd tmp cd haproxy.cfg /usr/local/sbin cd /usr/local/sbin haproxy -f haproxy.cfg
如果修改了配置文件(haproxy.cfg)的内容,需要先结束HAProxy进程,并重启代理。使用
killall
命令来结束,如果没有该命令,则apt-get update apt-get install psmic killall haproxy
应用栈访问测试
查看HAProxy容器信息,查询IP_HAProxy地址。
命令:
docker inspect HAPrxoy
在本地主机访问
浏览器输入:http://IP_HAProxy:6031/helloworld 可以查看 APP1 或者 APP2页面内容。浏览器输入:http://IP_HAProxy:6031/haproxy_stats 查看HAProxy的后台管理页面。
参考书籍:
- 《docker 容器与容器云》