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. Linq to SQL 语法查询(子查询 & in操作 & join )

    var 子查询 = from c in ctx.Customers                    where                        (from o in ctx.Ord ...

  2. day14 生成器的进阶

    一.生成器的两种形式  1.生成器函数的应用 # def cloth(): # for i in range(100): # yield '衣服%s'%i # # g = cloth() # for ...

  3. Android开发者必知的5个开源库

    摘要:过去的时间里,Android开发逐步走向成熟.而无论出现多少Android相关的开发工具,我们每天使用的大量开源库却始终是不可或缺的.这里,向大家介绍的是,这个任劳任怨的大家庭中,最受开发者喜爱 ...

  4. iphone客户端上传图片到服务器

    本文转载至 http://blog.sina.com.cn/s/blog_4c70701801012inq.html       如上采用asihttprequest类中的post方式上传就行.大致思 ...

  5. sql duplicate key

    本文来自:高爽,转载请注明. 向数据库插入记录时,有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是saveOrUpdate操作.这种控制可以放在业务层,也可以放在数据库 ...

  6. docker学习笔记(1)概述、原理学习、常用命令

    一.Docker概述 Docker是基于Go语言实现的云开源项目,诞生于2013年初,目前主流的Linux操作系统已支持Docker,如Redhat RHEL6.5/CentOS6.5.Ubuntu ...

  7. 巨蟒django之权限8:排序&&菜单展开权限归属

    1.权限控制的流程+表结构 内容回顾: wsgi:socket进行收发消息 中间件:(超级重点的面试题)在全局范围内控制django的输入和输出的一个钩子,处理输入和输出说白了就是处理请求和响应req ...

  8. django database relations

    注意Django的生成的默认api from django.db import models class Place(models.Model): ''' pass class Restaurant( ...

  9. iOS 面试题总结

    最近项目做完了 比较空闲 在网上看了一份面试题 想自己整理一下 一.为什么说Objective-C是一门动态的语言?NSUInteger和NSInteger 的区别? 静态 动态是相对的,这里的动态语 ...

  10. 我的Android进阶之旅------>Android的ListView数据更新后,如何使最新的条目可以自动滚动到可视范围内?

    在ListView的layout配置中添加 android:transcriptMode="alwaysScroll" <ListView android:id=" ...