Docker应用栈结构图

Build Django容器

编写docker-file

FROM django
RUN pip install redis

build django-with-redis image

root@swarm-manager:~# docker build -t django-with-redis .
Sending build context to Docker daemon .7kB
Step / : FROM django
---> eb40dcf64078
Step / : RUN pip install redis
---> Running in 61fb045c3277
Collecting redis
Downloading redis-2.10.-py2.py3-none-any.whl (64kB)
Installing collected packages: redis
Successfully installed redis-2.10.
You are using pip version 9.0., however version 9.0. is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Removing intermediate container 61fb045c3277
---> 60c26592c8e5
Successfully built 60c26592c8e5
Successfully tagged django-with-redis:latest

启动容器

启用Redis一个master和两个slave
# docker run -itd --name redis-master redis
# docker run -itd --name redis-slave1 --link redis-master:master redis
# docker run -itd --name redis-slave2 --link redis-master:master redis 启动Django
# docker run -itd --name app1 --link redis-master:db -v ~/Projects/Django/app1:/usr/src/app django-with-redis
# docker run -itd --name app2 --link redis-master:db -v ~/Projects/Django/app2:/usr/src/app django-with-redis 启动HAproxy
# docker run -itd --name HAproxy --link app1:app1 --link app2:app2 -p : -v ~/Projects/HAproxy:/usr/local/sbin haproxy

配置Redis

Redis-Master配置文件, 任意redis兼容的配置文件, 修改以下两个参数

daemonize yes
pidfile /var/run/redis.pid

Redis-Slave配置文件,任意redis兼容的配置文件,修改以下三个参数

daemonize yes
pidfile /var/run/redis.pid
slaveof master

将配置文件复制到Redis中,并启动Redis服务

# docker cp redis.conf redis-master:/usr/local/bin
# docker exec -it redis-master /bin/bash
# cd /usr/local/bin
# redis-server redis.conf

Redis主从测试-Master测试

root@93cf64cdeedd:/data# redis-cli
127.0.0.1:> set hello world
OK
127.0.0.1:> get hello
"world"
127.0.0.1:>

Redis主从测试-Slave测试

root@c84e012871ae:/data# redis-cli
127.0.0.1:> get hello
"world"
127.0.0.1:>

配置Django

在Django容器中,生成Django项目文件

# cd /usr/src/app
# mkdir dockerweb
# django-admin startproject redisweb
# cd redisweb
# python manage.py startapp helloworld

在Docker宿主机修改Django配置文件

root@swarm-manager:~/Projects/Django/App1/dockerweb/redisweb/helloworld# ls
admin.py apps.py __init__.py migrations models.py __pycache__ tests.py views.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=, db=)
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)

修改settings.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'
]

修改url.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),
]

进入Django容器完成项目生成

# python manage.py makemigrations
# python manage.py migrate

启动Django

# python manage.py runserver 0.0.0.0: &

配置HAProxy

创建配置文件

global
log 127.0.0.1 local0
maxconn
chroot /usr/local/sbin
daemon
nbproc
pidfile /usr/local/sbin/haproxy.pid defaults
log 127.0.0.1 local3
mode http
option dontlognull
option redispatch
retries
maxconn
balance roundrobin timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms listen redis_proxy
bind 0.0.0.0:
stats enable
stats uri /haproxy-stats
server app1 app1: check inter rise fall
server app2 app2: check inter rise fall

启动HAproxy

# cd /usr/local/sbin
# haproxy -f haproxy.cfg

验证

Docker 搭建一个Docker应用栈的更多相关文章

  1. 如何通过Docker搭建一个swoft开发环境

    本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们. Swoft首个基于 Swoole 原生协程的新时代 PHP ...

  2. 用Docker搭建一个支持https的nginx代理服务

    用Docker搭建一个支持https的nginx代理服务 说明:本文所提的服务只是作者平常测试使用,可能含有未知bug或不成熟的解决方案,仅供参考,请不要用于正式环境,当然,使用过程中有任何问题欢迎提 ...

  3. 5分钟使用docker搭建一个WordPress

    环境为已安装Docker Destop的Windows系统. 过程 使用Docker拉去官方WordPress镜像再进行简单配置是可行的, 但是这里我们使用docker-compose,它会自动根据你 ...

  4. 使用nexus搭建一个docker私服

    使用nexus搭建docker私服 一.需求: 二.实现步骤 1.编写`docker-compose`文件,实现`nexus`的部署 2.修改/usr/lib/systemd/system/docke ...

  5. Swoft 新手向教程 - 通过 Docker 搭建一个开发环境

    本系列文章将从使用层面介绍 Swoft 框架的使用及业务开发,面向初中级的 PHPer Swoft首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈组件化框架,内置协程网络服务器及常用的 ...

  6. 温故知新,基于Nexus3和Docker搭建私有Docker Mirrors镜像库

    前言 接着上一篇文章关于基于Nexus3和Docker搭建私有Nuget服务的探索,我们可以进一步利用Nexus3来创建一个私有的Docker镜像库满足内部需求. 仓库类型 hosted: 本地存储, ...

  7. 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  8. Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  9. docker 搭建私有 docker hub

    查找registry 镜像 meiya@meiya:/etc/docker$ clear meiya@meiya:/etc/docker$ docker search registry NAME DE ...

随机推荐

  1. (转)Unity 导出XML配置文件,动态加载场景

    参考:http://www.xuanyusong.com/archives/1919 http://www.omuying.com/article/48.aspx   主要功能: 1.导出场景的配置文 ...

  2. Unity3D学习笔记——NGUI使用常见问题

    一:在Scene中右键创建UI组件. 首先要确定NGUI中的红框能看见,我的就是之前无法现实红框,所以右键无法新建UI组件, 原因是:UIPanel没启用. 启用方法: 启用前和启用后NGUI界面对比 ...

  3. Gson和Fastjson的使用

    转载自:JSON技术的调研报告 一.Google的Gson包的使用简单介绍. Gson类:解析json的最基础的工具类 JsonParser类:解析器来解析JSON到JsonElements的解析树 ...

  4. 利用Lucene将被索引文件目录中的所有文件建立索引

    1.新建两个文件夹htm和index,其中htm中存放被索引的文件,index文件中存放建立的索引文件. 2.新建解析目录中所有文件的类,用来解析指定目录下的所有文件. import java.io. ...

  5. 集成 SOLR 到 TOMCAT 中(傻瓜教程)

    按照如下配置,整个 Solr 是绿色版的,可以将 Tomcat 目录复制到任何一个地方运行 1.下载 solr 4.3 版本 2.下载 Tomcat 7 ( 6 也可以),另外可以根据系统下载 32 ...

  6. class 中构造函数与析构函数

    import pymysql class My_sql(): def __init__(self, host, user, passwd, db, port=3306, charset='utf8') ...

  7. jqgrid动态添加rowlist

    function changePager(){     var pagerCenter =$('#grid-pager_center');//获取td     pagerCenter.find('se ...

  8. 移动端之touch事件--手指的滑动事件

    转自[B5教程网]:http://www.bcty365.com/content-142-5243-1.html 总结:touchmove的最后坐标减去touchstart的起始坐标.X的结果如果正数 ...

  9. 封装AFNetworking

    用了一下AFNetworking感觉比ASIHttprequest 真心好用一些,因为我还是个初学者吧,很多ASIHttprequest 的功能还没有用到,与ASIHttprequest 不用的是AF ...

  10. MySQL中InnoDB存储引擎中的哈希算法

    InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表方式,哈希函数采用除法散列方式.对于缓冲池页的哈希表来说,在缓冲池中的Page页都有一个chain指针.它指向相同哈希函数值的页的. ...