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

2018-10-14  本文已影响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不能访问,原因不明,暂时不找了.

上一篇下一篇

猜你喜欢

热点阅读