Docker 搭建一个Docker应用栈
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应用栈的更多相关文章
- 如何通过Docker搭建一个swoft开发环境
本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们. Swoft首个基于 Swoole 原生协程的新时代 PHP ...
- 用Docker搭建一个支持https的nginx代理服务
用Docker搭建一个支持https的nginx代理服务 说明:本文所提的服务只是作者平常测试使用,可能含有未知bug或不成熟的解决方案,仅供参考,请不要用于正式环境,当然,使用过程中有任何问题欢迎提 ...
- 5分钟使用docker搭建一个WordPress
环境为已安装Docker Destop的Windows系统. 过程 使用Docker拉去官方WordPress镜像再进行简单配置是可行的, 但是这里我们使用docker-compose,它会自动根据你 ...
- 使用nexus搭建一个docker私服
使用nexus搭建docker私服 一.需求: 二.实现步骤 1.编写`docker-compose`文件,实现`nexus`的部署 2.修改/usr/lib/systemd/system/docke ...
- Swoft 新手向教程 - 通过 Docker 搭建一个开发环境
本系列文章将从使用层面介绍 Swoft 框架的使用及业务开发,面向初中级的 PHPer Swoft首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈组件化框架,内置协程网络服务器及常用的 ...
- 温故知新,基于Nexus3和Docker搭建私有Docker Mirrors镜像库
前言 接着上一篇文章关于基于Nexus3和Docker搭建私有Nuget服务的探索,我们可以进一步利用Nexus3来创建一个私有的Docker镜像库满足内部需求. 仓库类型 hosted: 本地存储, ...
- 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)
本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...
- docker 搭建私有 docker hub
查找registry 镜像 meiya@meiya:/etc/docker$ clear meiya@meiya:/etc/docker$ docker search registry NAME DE ...
随机推荐
- setTimeout里无法调用鼠标事件的event
问题的由来是下面这段代码: middleOnmouseLeave: function (event) { setTimeout(function () { event.currentTarget.st ...
- Editor编辑器的一些用法
共有两个脚本,一个是有关Inspector面板的,一个是window的 using UnityEngine; using System.Collections; using UnityEditor; ...
- lumen-Permission 权限管理使用心得
安装 composer require spatie/laravel-permission github上有详细介绍:https://github.com/spatie/laravel-permiss ...
- jQuery EasyUI的各历史版本和应用
from:http://blog.sina.com.cn/s/blog_b8be6dc40102xpe6.html 各历史版本下载地址: http://www.jeasyui.com/download ...
- LINUX手动查看和修改MTU值的方法
默认的ANDROID系统中不带BUSYBOX,所以无法用BUSYBOX IFCONFIG来查看修改MTU值.其实网卡的MTU值是保存在/sys/class/net/eth0/mtu文件中,所以可以通过 ...
- node.js的安装与第一个hello world、node.js的初始化
1.下载node.js文件 2.windows下点击安装 重复下一步即可 3.编辑工具 EditPlus编辑器 4.新建保存目录的文件夹,并新建一个文本文档 5.打开EditPlus编辑器 打开 ...
- NOIP2011提高组(选择客栈)
题目链接:http://codevs.cn/problem/1135/ 题目大意:中文题...就不解释了 题目思路:看了其他巨巨的blog写的,dp思路 #include <iostream&g ...
- 【BZOJ2555】SubString 后缀自动机+LCT
[BZOJ2555]SubString Description 懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2 ...
- bat masterNodeRun.bat
C:\> compare C:\> compare C:\>D:\cmd\wphp.bat C:\> compareReq -- :: TODO StartScript -- ...
- JavaScript确定一个字符串是否包含在另一个字符串中的四种方法
一.indexOf() 1.定义 indexOf()方法返回String对象第一次出现指定字符串的索引,若未找到指定值,返回-1.(数组同一个概念) 2.语法 str.indexOf(searchVa ...