美文网首页
windows版docker搭建应用栈(入门级)

windows版docker搭建应用栈(入门级)

作者: 超级小小张 | 来源:发表于2018-10-14 16:45 被阅读0次

    最近开始学习docker,朋友推荐了一本《docker容器与容器云》的PDF电子版,参照里面第二章3节搭建你的第一个docker应用栈做了实践。书中是在linux环境下搭建的,而我是在windows环境安装了docker,具体安装步骤和入门,后续抽时间写文章出来。

    下面直接捡干货写,按步骤进行

    1.获取所需镜像

    # docker pull django          //web应用

    # docker pull haproxy        //负载均衡服务器

    # docker pull redis              //redis镜像,构建一个1主2从的主从复制集群

    2.启动容器

    启动redis容器

    # docker run -it --name redis-master -v d:\docker-volume\redis\master:/usr/src/redis redis /bin/bash

    # docker run -it --name redis-slave1 -v d:\docker-volume\redis\slave1:/usr/src/redis --link redis-master:master redis /bin/bash

    # docker run -it --name redis-slave2 -v d:\docker-volume\redis\slave2:/usr/src/redis --link redis-master:master redis /bin/bash

    启动django容器

    # docker run -it --name APP1 --link redis-master:db -v d:\docker-volume\django\app1:/usr/src/app django /bin/bash

    # docker run -it --name APP2 --link redis-master:db -v d:\docker-volume\django\app2:/usr/src/app django /bin/bash

    启动HAProxy容器

    # docker run -it --name HAProxy--link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v d:\docker-volume\haproxy:/tmp haproxy/bin/bash

    参数说明:

    -i使用交互模式

    -t分配一个伪终端

    --link用来建立容器间的连接,不但可以避免容器的IP和端口暴露到外网导致的安全问题,还可以防止容器在重启时IP地址变换造成的访问失效,它的原理类似于DNS服务器的域名和地址的映射.当容器的IP地址发生变化时,docker将自动维护映射关系中的IP映射.可通过:cat /etc/hosts 查看

    --name指容器名字

    -v用于挂载一个volume,也可以用多个-v同时挂载多个volume,用于指定宿主机与容器共享文件夹,格式:[host_dir]:[container_dir]:[rw:ro]

    -p将容器的端口暴露给宿主机的端口,格式host-port:container-port,通过端口暴露可以让外部主机通过宿主机

    3.配置redis集群

    查看redis版本,docker inspect redis-master,然后去找到对应的redis.conf配置文件

    在宿主机操作

    复制redis.conf到d:\docker-volume\redis\master,做如下操作

    注释掉

    bind 127.0.0.1

    protected-mode yes

    修改

    daemonize no 改为 daemonize yes

    复制redis.conf到d:\docker-volume\redis\slave1,做如下操作(slave2)同操作

    注释掉

    bind 127.0.0.1

    protected-mode yes

    修改

    daemonize no 改为 daemonize yes

    增加

    slaveof master 6379

    4.启动redis主从集群

    按顺序启动master,slave1,slave2

    # /usr/local/bin/redis-server /usr/src/redis/redis.conf

    通过redis-cli连接测试集群是否成功

    5.APP(Django)节点配置

    # docker attach APP1    //进入APP1容器的命令窗口

    # python --version          //查看python版本

    # pip install redis //安装redis包

    创建APP

    在宿主机 d:\docker-volume\django\app1下

    编辑helloworld/views.py

    from django.http import HttpResponse

    import redis

    def hello(request):

        str1 = redis.__file__

        str1 += "<br>"

        r = redis.Redis(host='db', port=6379, db=0)

        info = r.info()

        str1 += "Set Hi <br>"

        r.set('Hi', 'HelloWorld-APP1')

        str1 += ("Get Hi: %s <br>" % r.get('Hi'))

        str1 += "Redis Info:<br>"

        str1 += "Key: Info Value"

        for key in info:

            str1 += ("%s: %s <br>" % (key, info[key]))

        return HttpResponse(str1)

    修改redisweb/setting.py

    INSTALLED_APPS = [

        'django.contrib.admin',

        'django.contrib.auth',

        'django.contrib.contenttypes',

        'django.contrib.sessions',

        'django.contrib.messages',

        'django.contrib.staticfiles',

        'helloworld'

    ]

    修改redisweb/urls.py

    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)

    ]

    在容器里面完成项目的生成,进入dockerweb/redisweb目录执行

    #python manage.py makemigrations  //在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件

    #python manage.py migrate //将该改动作用到数据库文件,比如产生table之类

    #python manage.py runserver 0.0.0.0:8001 //启动web应用

    6.配置HAProxy容器

    在宿主机下d:\docker-volume\haproxy新建haproxy.cfg,注意空格和换行,否则启动会报错

    global

    log 127.0.0.1 local0

    chroot /usr/local/sbin

    pidfile /usr/local/sbin/haproxy.pid

    maxconn 4096

    daemon

    nbproc 4

    defaults

    mode http

    log 127.0.0.1 local3

    option dontlognull

    option redispatch

    maxconn 3000

    retries 2

    balance roundrobin

    timeout connect 5s

    timeout client 50s

    timeout server 50s

    listen redis_proxy

    bind 0.0.0.0:6301

    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

    在容器下运行:/usr/local/sbin/haproxy -f /tmp/haproxy.cfg启动

    7.在宿主机访问搭建完的应用栈

    localhost:6301/helloworld

    locahost:6301/haproxy-stats

    遗留问题:用宿主机ip:6301/helloworld不能访问,原因不明,暂时不找了.

    相关文章

      网友评论

          本文标题:windows版docker搭建应用栈(入门级)

          本文链接:https://www.haomeiwen.com/subject/tlzzaftx.html