为了账号安全,请及时绑定邮箱和手机立即绑定

Docker 第一个Hello word

标签:
Docker

实验所用系统 centos 7.0

HAproxy 是负载均衡代理节点;
App 使用python 基于django的web应用访问Redis;
Reids 是非关系型数据库,它由一个数据库节点和两个从数据库节点组成。

webp

架构图

一、安装、配置docker

1.  yum安装docker

#安装dockeryum install -y docker#启动dockersystemctl start docker.servie#设置自启动systemctl enable docker

2. 使用国内镜像

由于国内访问国外镜像仓库慢,需要使用国内镜像加速
https://www.daocloud.io/

vim /lib/systemd/system/docker.service#添加ExecStart=/usr/bin/dockerd-current
--registry-mirror='http://*******.m.daocloud.io'

3.获取所需要的镜像

  • 3.1从Docker Hub获取镜像

#需要从Docker Hub获取ubuntu、django、haproxy、redis镜像docker pull ubuntu
docker pull django
docker pull haproxy
docker pull redis
  • 3.2查看仓库内下载的镜像

#查看镜像docker images

webp

仓库中的镜像

二、启动容器节点

在搭建第一个Hello World 应用,将在同一主机下进行,这里采用docker run 命令 的--link 选项建立容器的互联关系来实现容器间的通信。
--link name:alias
name 容器名
alias 别名

1.使用--link 选项

通过--link 选项来建立容器的连接,可方式容器在重启后ip地址变化导致的访问失效,它的原理类似于DNS服务器的域名和地址映射。当容器的ip地址发生变化时,Docker将自动维护映射关系中的ip地址。因此在启动是需要按照顺序启动

  • 启动redis-master容器节点

  • 两个redis-slave容器节点启动时要连接到redis-master上

  • 两个APP容器节点启动时要连接到redis-master上

  • HAProxy容器启动时要连接到两个APP节点上

2.容器按顺序启动

小提示:使用Ctrl+p+q 可以退出容器,并保持容器继续运行!

#容器启动顺序redis-master -> redis-slave-> APP ->HAProxy
#启动redis 容器docker run -it --name redis-master redis /bin/bash
docker run -it --name redis-slave1 --link redis-master:master redis /bin/bash
docker run -it --name redis-slave2 --link redis-master:master redis /bin/bash#启动django容器docker run -it --name APP1 --link redis-master:db -v ~/Projects/Django/App1:/usr/src/app django /bin/bash
docker run -it --name APP2 --link redis-master:db -v ~/Projects/Django/App2:/usr/src/app django /bin/bash#启动HAProxy容器docker run -it --name HAProxy --link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v ~/Projects/HAProxy:/tmp haproxy /bin/bash
#如图所示是全部节点启动的状态docker ps

webp

节点启动的状态

三、应用节点的配置

1.Redis Master 主数据库容器节点配置

  • 1.1 查看redis-master挂载

#查看容器挂载目录docker inspect --format "{{ .Config.Volumes }}" redis-master#查看主机挂载目录docker inspect redis-master | grep Source

webp

redis-master挂载目录

#修改内容daemonize yes
pidfile /var/run/redis_6379.pid
  • 1.3 在主机内

#进入redis-master共享目录cd /var/lib/docker/volumes/4503836f46d5c775ed88b82556b033128df0d4c90132aa6a6206920317f46d2e/_data#复制配置文件至共享目录cp redis.conf ./
  • 1.4 在容器内

#进入容器docker attach redis-master 

#复制配置文件并启动cd /data
cp redis.conf /usr/local/bin/redis.confcd /usr/local/bin/
redis-server redis.conf#退出容器Ctrl +p+q
  • 1.5 查看redis 启动状态

ps aux |grep redis

webp

redis启动成功

2. Redis Slave 从数据库容器节点的配置

  • 2.1 查看redis-slave1挂载

#查看容器挂载目录docker inspect --format "{{ .Config.Volumes }}" redis-slave1#查看主机挂载目录docker inspect redis-slave1 | grep Source
#修改内容daemonize yes
pidfile /var/run/redis_6379.pid
slaveof master 6379
  • 2.3 在主机内

#进入redis-slave1共享目录cd /var/lib/docker/volumes/208cf56dd93e5e589e9110f5ab2f8f59e6bf6406d6839d5518bf10675bd78620/_data#复制配置文件至共享目录cp redis.conf ./
  • 2.4 在容器内

#进入容器docker attach redis-master 

#复制配置文件并启动cd /data
cp redis.conf /usr/local/bin/redis.confcd /usr/local/bin/
redis-server redis.conf#退出容器Ctrl +p+q
  • 2.5 修改 redis-slave2 类似redis-slave1,这里不在重复。

  • 2.6 Master Redis数据库容器节点测试

#进入Master 容器中docker attach redis-master#使用客户端redis-cli 127.0.0.1:6379> set master abcd127.0.0.1:6379> get master"abcd"

webp

Master 插入查询数据

  • 2.7 Slaver Redis数据库容器节点测试

#进入redis-slave1或redis-slave2 容器中docker attach redis-slave1 或 docker attach redis-slave2#查询先前在Master数据库中存储的数据redis-cli 
127.0.0.1:6379> get master"abcd"

webp

Slave 查询数据

测试结果,Master 数据库中的数据已经自动同步到了Slave数据库中

3.APP容器节点配置

  • 3.1容器内创建应用

#进入APP1docker attach APP1#安装python语言的Redis支持包pip install redis#进入项目目录并创建页面appcd /usr/src/app/
mkdir dockerwebcd dockerweb
django-admin.py startproject rediswebcd redisweb
python manage.py startapp helloworld

webp

测试安装效果

  • 3.2主机内修改配置

#cd ~/Projects/Django/App1/dockerweb/redisweb/helloworld#修改views.pyfrom django.shortcuts import renderfrom django.http import HttpResponse# Create your views here.import redisdef hello(request):
        strs=redis.__file__
        strs+="<br>"
        r = redis.Redis(host='db',port=6379,db=0)
        info =r.info()
        strs+=("Set Hi <br>")
        r.set('Hi','HelloWorld-APP1')
        strs+=("Get Hi: %s <br>" % r.get('Hi'))
        strs+=("Redis Info: <br>")
        strs+=("key :Info Value")        for key in info:
                strs+=("%s:%s <br>" % (key,info[key]))        return HttpResponse(strs)
#cd ~/Projects/Django/App1/dockerweb/redisweb/redisweb#修改settings.pyALLOWED_HOSTS = ['*']

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'helloworld']
#cd ~/Projects/Django/App1/dockerweb/redisweb/redisweb#修改urls.pyfrom django.conf.urls import urlfrom django.contrib import adminfrom helloworld.views import hello
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^helloworld$',hello),
]
  • 3.3容器内启动应用

python manage.py makemigrationspython manage.py migrate#创建管理员账户python manage.py createsuperuser#启动web应用python manage.py runserver 0.0.0.0:8001#退出容器Ctrl+p+q

webp

启动过程

4.haproxy容器节点配置

  • 4.1 在主机修改配置文件

#将haproxy.cfg复制在改目录下(git下载)#cd ~/Projects/HAProxy#haproxy.cfgglobal    log         127.0.0.1 local2

    chroot      /usr/local/sbin
    pidfile     /usr/local/sbin/haproxy.pid
    maxconn     4096    #user        haproxy
    #group       haproxy
    daemon

defaults
    mode                    http    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

listen redis_proxy    bind 0.0.0.0:6301
    stats enable
    stats uri /haproxy-stats
    stats auth admin:admin    #log 127.0.0.1 local0 debug 
        server APP1 APP1:8001 check inter 2000 rise 2 fall 5 
        server APP2 APP2:8002 check inter 2000 rise 2 fall 5
  • 4.2 进入容器中

cd /tmp/
cp haproxy.cfg /usr/local/sbin/cd /usr/local/sbin/#启动haproxyhaproxy -f haproxy.cfg

5.集群访问测试

整个应用部署完成后,可以进行访问测试。在浏览器访问(主机ip地址)http://192.168.153.129:6301/helloworld 可以查看到APP1和APP2的页面内容

webp

HAProxy轮询至APP1

webp

HAProxy轮询至APP2



作者:_简_述_
链接:https://www.jianshu.com/p/7331af461066


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消