docker应用栈(续)

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

应用栈访问测试

  1. 查看HAProxy容器信息,查询IP_HAProxy地址。

    命令:docker inspect HAPrxoy

  2. 在本地主机访问
    浏览器输入:http://IP_HAProxy:6031/helloworld 可以查看 APP1 或者 APP2页面内容。

    浏览器输入:http://IP_HAProxy:6031/haproxy_stats 查看HAProxy的后台管理页面。

参考书籍:
  1. 《docker 容器与容器云》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值