准备工作:

CentOS 7安装docker:

#yum -y install docker

1、获取节点所需镜像

--主机执行

#docker pull django

#docker pull haproxy

#docker pull redis

# docker images

REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE

docker.io/haproxy       latest              d2deb2e11e09        6 days ago          135.5 MB

docker.io/redis         latest              4e482b286430        13 days ago         98.95 MB

docker.io/django        latest              eb40dcf64078        6 months ago        436 MB

2、启动各个容器

--主机执行

# 启动redis容器

sudo docker run -it --name redis-master redis /bin/bash

sudo docker run -it --name redis-slave1 --link redis-master:master redis /bin/bash

sudo docker run -it --name redis-slave2 --link redis-master:master redis /bin/bash

# 启动django容器

sudo docker run -it --name APP1 --link redis-master:db -v ~/Projects/Django/App1:/usr/src/app django /bin/bash

sudo docker run -it --name APP2 --link redis-master:db -v ~/Projects/Django/App2:/usr/src/app django /bin/bash

# 启动haproxy容器

sudo docker run -it --name HAProxy --link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v ~/Projects/HAProxy:/tmp haproxy /bin/bash

# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

61ceae4c7c85        haproxy             "/docker-entrypoint.s"   8 hours ago         Up 8 hours          0.0.0.0:6301->6301/tcp   HAProxy

7b11baf7b2fd        django              "/bin/bash"              8 hours ago         Up 8 hours                                   app2

bdb9ddacefdb        django              "/bin/bash"              8 hours ago         Up 8 hours                                   app1

2877a5829a6d        redis               "docker-entrypoint.sh"   8 hours ago         Up 8 hours          6379/tcp                 redis-slave2

a39b414d570c        redis               "docker-entrypoint.sh"   8 hours ago         Up 8 hours          6379/tcp                 redis-slave1

c7c22a1a4123        redis               "docker-entrypoint.sh"   8 hours ago         Up 8 hours          6379/tcp                 redis-master

3、redis节点配置

主机操作,切换到容器挂载目录下,进行master节点配置:

# docker inspect --format "{{ .Config.Volumes }}" c7c22a1a4123

map[/data:{}]

# docker inspect c7c22a1a4123 | grep Source

"Source": "/var/lib/docker/volumes/4e823da40e15260dc5865060ce54d11b34f7527c37f1f55cbd4457f411ac7905/_data",

#cd /var/lib/docker/volumes/4e823da40e15260dc5865060ce54d11b34f7527c37f1f55cbd4457f411ac7905/_data

#cp <your-own-redis-dir>/redis.conf redis.conf

#vim redis.conf

修改以下内容:

bind 0.0.0.0

daemonize yes

pidfile /var/run/redis.pid

容器内操作,启动redis master节点服务:

#cd /data

#cp redis.conf /usr/local/bin

#cd /usr/local/bin

#redis-server redis.conf

4、配置redis slave节点

主机操作配置redis配置文件:

# docker inspect --format "{{ .Config.Volumes }}" a39b414d570c

map[/data:{}]

# docker inspect a39 | grep Source

"Source": "/var/lib/docker/volumes/3c4ae73e1457456daf67ee0c03c33a41f855edc9c1c5d7226ef8119e3804561b/_data",

#cd /var/lib/docker/volumes/3c4ae73e1457456daf67ee0c03c33a41f855edc9c1c5d7226ef8119e3804561b/_data

#cp <your-own-redis-dir>/redis.conf redis.conf

#vim redis.conf

修改以下内容:

bind 0.0.0.0

daemonize yes

pidfile /var/run/redis.pid

slaveof master 6379

切换到redis slave1节点容器下执行:

#cd /data

#cp redis.conf /usr/local/bin

#cd /usr/local/bin

#redis-server redis.conf

同理启动redis另一个从节点。

至此redis配置完成,进行redis功能测试:

以redis-cli方式登录redis master节点:

# redis-cli

127.0.0.1:6379> set master c7c2

OK

127.0.0.1:6379> get master

"c7c2"

127.0.0.1:6379> quit

以redis-cli方式登录redis slave节点:

# redis-cli

127.0.0.1:6379> get master

"c7c2"

127.0.0.1:6379> quit

Slave节点能正常接收主节点设置,说明redis配置成功。

5、app容器节点配置

App容器内安装python语言redis支持包:

#pip install redis

测试:

# python

Python 3.4.5 (default, Dec 14 2016, 18:54:20)

[GCC 4.9.2] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import redis

>>> print(redis.__file__)

/usr/local/lib/python3.4/site-packages/redis/__init__.py

>>> quit()

6、创建app:

容器内:

#cd /usr/src/app

#mkdir dockerapp    ##注意,这里需要关闭主机的selinux功能,关闭方式:setenforce 0

#cd dockerapp

# django-admin.py startproject redisweb

# ls

redisweb

# cd redisweb/

# ls

manage.py  redisweb

# python manage.py startapp helloworld

# ls

helloworld  manage.py  redisweb

主机内:

# cd ~/Projects/Django/App1/

# ls

dockerweb

# cd dockerweb/redisweb/helloworld/

# ls

admin.py  apps.py  __init__.py  migrations  models.py  __pycache__  tests.py  views.py

# vim 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=6379,db=0)

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文件:

# ls

__init__.py  __pycache__  settings.py  urls.py  wsgi.py

# vim 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',                       --添加此处

]

最后再修改urls.py文件:

# vim urls.py

修改后内容如下:

from django.conf.urls import include,url

from django.contrib import admin

from helloworld.views import hello

urlpatterns = [

url(r'^admin/', include(admin.site.urls)),

url(r'^helloworld$',hello),

]

进入app容器,完成项目的生成:

# python manage.py makemigrations

No changes detected

# python manage.py migrate

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions

Running migrations:

Applying contenttypes.0001_initial... OK

Applying auth.0001_initial... OK

Applying admin.0001_initial... OK

Applying admin.0002_logentry_remove_auto_add... OK

Applying contenttypes.0002_remove_content_type_name... OK

Applying auth.0002_alter_permission_name_max_length... OK

Applying auth.0003_alter_user_email_max_length... OK

Applying auth.0004_alter_user_username_opts... OK

Applying auth.0005_alter_user_last_login_null... OK

Applying auth.0006_require_contenttypes_0002... OK

Applying auth.0007_alter_validators_add_error_messages... OK

Applying auth.0008_alter_user_username_max_length... OK

Applying sessions.0001_initial... OK

# python manage.py createsuperuser

Username (leave blank to use 'root'):

Email address:

Password:

Password (again):

This password is too short. It must contain at least 8 characters.

Password:

Password (again):

Superuser created successfully.

至此,app节点配置完成,按照相同步骤配置app节点2.

容器内启动两个app节点:

# python manage.py runserver 0.0.0.0:8001

# python manage.py runserver 0.0.0.0:8002

7、haproxy节点配置

主机操作:

# cd ~/Projects/HAProxy/

#vim haproxy.cfg

内容如下:

global

log 127.0.0.1 local0

maxconn 4096

chroot /usr/local/sbin

daemon

nbproc 4

pidfile /usr/local/sbin/haproxy.pid

defaults

log 127.0.0.1 local3

mode http

option dontlognull

option redispatch

retries 2

maxconn 2000

balance roundrobin

timeout connect 5000ms

timeout client 50000ms

timeout server 50000ms

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

进入容器,启动haproxy负载均衡服务:

#cd /usr/local/sbin

# cp /tmp/haproxy.cfg haproxy.cfg

# haproxy -f haproxy.cfg

至此,代理服务配置完成。

应用测试:

客户机登录:http://192.168.100.235:6301/helloworld

客户机也可以登录后台管理界面:http://192.168.100.235:6301/haproxy-stats

Docker容器与容器云之Docker单机集群部署案例的更多相关文章

  1. 阿里云构建Kafka单机集群环境

    简介 在一台ECS阿里云服务器上构建Kafa单个集群环境需要如下的几个步骤: 服务器环境 JDK的安装 ZooKeeper的安装 Kafka的安装 1. 服务器环境 CPU: 1核 内存: 2048 ...

  2. Redis基本概念、基本使用与单机集群部署

    1. Redis基础 1.1 Redis概述 Redis是一个开源.先进的key-value存储,并用于构建高性能.可扩展的应用程序的完美解决方案. Redis从它的许多竞争继承了三个主要特点:    ...

  3. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)(转载)

    本文结构 ASP.NET Core应用程序的构建 ASP.NET Core应用程序容器化所需注意的问题 应用程序的配置信息 端口侦听 ASP.NET Core的容器版本 docker镜像构建上下文(B ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  9. Docker集群部署SpringCloud应用

    整体架构 docker环境准备 # linux下的安装,自行百度 # windows docker toolbox下载地址 https://download.docker.com/win/stable ...

随机推荐

  1. 脚本加密http://www.datsi.fi.upm.es/~frosal/sources/

    shc的官网下载地址: http://www.datsi.fi.upm.es/~frosal/sources/ 安装: 复制代码 代码如下: tar xzvf shc-.tgz cd shc- mkd ...

  2. [APM] OneAPM 云监控部署与试用体验

    摘要: 作为 Zabbix 骨灰级粉丝,一直以来对第三方监控(APM)都是拒绝的.一来觉得收费,二来担心数据被人所知,三来觉得 Zabbix 牛逼到无可取代.但是,随着 APM 市场的火爆,我决定「放 ...

  3. vue模板的讲解

    1.项目目录 2.入口文件index.html 3.index.html默认调用的main.js 3.调用的组件app.vue 4.调用组件hello.vue

  4. TWELP™ Vocoder

    TWELP™ Vocoder   DSP Innovations Inc. (DSPINI) announces new class of proprietary vocoders for wide ...

  5. 【Unity】序列化字典Dictionary的问题

    问题:在C#脚本定义了public Dictionary字典,然而在编辑器检视面板Editor Inspector中看不到(即无法序列化字典).即不能在编辑器中拖拽给字典赋值. 目标:检视面板Insp ...

  6. debian/deepin 15.3 15.4安装jdk 1.7 (或jdk 7),配置默认环境

    一.前言 Deepin 15.3是基于Debian开发的,安装jdk 1.7有所不同,默认是openjdk-8-jdk,而我们玩一些编译需要的是jdk 7. 所以本文给出安装JDK 7的教程. Dee ...

  7. php 无限分类 树形数据 格式化

    测试demo ------------------------------------------------------------------------------------ <?php ...

  8. 最全面的Spring-Boot-Cache使用与整合

    一:Spring缓存抽象 Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口 ...

  9. 织梦中在线显示pdf文件的方法

    如何在织梦中添加pdf文件并显示呢?下面这个教程将带领大家来操作.(注:手机版无法查看) 第一步:在系统-系统基本参数-附件设置中添加pdf格式 并且将大小调大 第二步:在核心-内容模型-普通文章中添 ...

  10. 仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)

    2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最后说会开源一个播放器,没想到快两年了,才 ...