码迷,mamicode.com
首页 > Web开发 > 详细

Docker Web化管理实践

时间:2016-01-20 06:25:28      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:docker

                        2016-01-06                                                开源技术社区                                                OpenSkill                                                                    

背景

目前很多公司都在使用docker,docker也是一种趋势,我们公司也在使用docker,所以我也跟着学习使用docker,根据基本需求,结合api做了一个web程序

实验环境

本次试验使用两台实体机做模拟docker集群,一台虚拟机做docker镜像服务器,一台虚拟机做web管理机
系统软件环境及版本:
    selinux disabled
    iptables -F
    三台docker机器系统使用centos7.1,两台模拟机群docker机软件docker+pipework+openswitch+etcd+dhcp,docker镜像服务器跑了一个registry容器提供镜像服务
    Web管理机使用ubuntu,python+django+uwsgi

原理图


技术分享


程序流程图


技术分享

原理

通过web界面创建删除容器和镜像,web服务器通过api操作三台docker机器,创建容器时通过dhcp获取ip,pipework给容器附上获取的ip,并把容器信息写入etcd库中,由于容器重启后ip消失,我通过监控脚本给启动没有ip的容器重新附上ip。容器支持ssh,有好处也有风险。
网络这块我是用交换机提供的网段,容器使用的ip和实体机在同一valn,你也可以一个集群使用一个valn,这里我是用同一valn。容器ip可以从交换机dhcp获取,不懂交换机,我直接用一台docker实体机起了dhcp服务,为该段提供dhcp服务。



安装

1.1 docker集群节点

两台机器软件一样,我就以AB区别,软件基本一样,A多了一个dhcp,没有使用交换机提供dhcp

1.2 安装openswitch:

如果后期不想在docker集群中划分vlan,可以使用系统自带的brctl命令创建桥接网卡,下面创建桥接网卡的脚本相应的变一下,ovs-vsctl改为brctl
yum install gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config   libtool
wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz

tar zxvf openvswitch-2.3.1.tar.gz
mkdir -p ~/rpmbuild/SOURCES
cp openvswitch-2.3.1.tar.gz ~/rpmbuild/SOURCES/
sed ‘s/openvswitch-kmod, //g‘ openvswitch-2.3.1/rhel/openvswitch.spec > openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec

rpmbuild -bb --without check openvswitch-2.3.1/rhel/openvswitch_no_kmod.spec
#之后会在~/rpmbuild/RPMS/x86_64/里有2个文件
-rw-rw-r-- 1 ovswitch ovswitch 2013688 Jan 15 03:20 openvswitch-2.3.1-1.x86_64.rpm
-rw-rw-r-- 1 ovswitch ovswitch 7712168 Jan 15 03:20 openvswitch-debuginfo-2.3.1-1.x86_64.rpm

yum localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.3.1-1.x86_64.rpm

systemctl enable openvswitch
systemctl start openvswitch

1.3 下载pipework:

git clone https://github.com/jpetazzo/pipework.git
chmod +x pipework
cp pipework   /usr/bin/pipework

1.4 网卡配置
脚本下载地址

在节点机器上
pwd 
/root
check_modify_container.py create_docker_container_use_dhcp_ip.sh    openvswitch_docker.sh
#openvswitch_docker.sh 是网卡初始化脚本
#create_docker_container_use_dhcp_ip.sh 是创建容器时会调用的脚本
#check_modify_container.py  容器ip监控脚本
crontab -e
*/5 * * * * python /root/check_modify_container.py  #监控脚本每五分钟执行一次

em1 为管理网段ip
Ovs1桥接在em2上,为docker内网网段ip
配置网卡,这里使用桥接

cat openvswitch_docker.sh
#!/bin/bash
#删除docker测试机
#docker rm `docker stop $(docker ps -a -q)`
#删除已有的openvswitch交换机
ovs-vsctl list-br|xargs -I {} ovs-vsctl del-br {}
#创建交换机
ovs-vsctl add-br ovs1
#把物理网卡加入ovs1
ovs-vsctl add-port ovs1 em2
ip link set ovs1 up
ifconfig em2 0
ifconfig ovs1 192.168.157.21 netmask 255.255.255.0

chmod +x openvswitch_docker.sh
sh openvswitch_docker.sh

也可以写到配置文件中
我的em1为管理网卡10.0.0.21
A机器中安装dhcp,集群中一台机器配置dhcp就可以了,网段根据你的环境改变

yum install -y dhcp
vim /etc/dhcp/dhcpd.conf 
    log-facility local7;
    ddns-update-style none;

    subnet 192.168.157.0 netmask 255.255.255.0 {
          range 192.168.157.100 192.168.157.200;
          option domain-name-servers 202.106.0.20;
          option routers 192.168.157.1;
          option broadcast-address 192.168.157.255;
          default-lease-time 80000;
          max-lease-time 80000;
        }
    systemctl enable dhcpd
systemctl start dhcpd

1.5 安装docker

yum install -y docker
vim /etc/sysconfig/docker
    OPTIONS=‘--selinux-enabled --insecure-registry 192.168.46.130:5000  -b=none -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock‘
#指定镜像服务器为192.168.46.130,net使用none模式,监听2375端口,这个端口提供api访问的
systemctl start docker.service
systemctl enable docker.service

1.6 Etcd安装

yum install libffi libffi-devel python-devel
yum -y install epel-release
yum -y install python-pip
yum install etcd -y
vim /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
###这里etcd我没有做成集群,每台docker机的数据就保存在本机的etcd库中,不与其他节点同步,也不需要提供其他节点访问,这里设置监听本机
systemctl enable etcd
systemctl start etcd

2.1 docker镜像服务器

镜像服务器在安装配置完docker后,从官网pull下来一个registry镜像,启动创建一个镜像服务器容器
docker search registry
docker pull docker.io/registry 
docker run --restart always  -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry
安装docker请重复1.5

3.1  web服务器
Django web程序下载地址

Web服务器系统我用的ubuntu,主要是安装软件简单,源及软件更新比较快
>>> import django
>>> django.VERSION
(1, 7, 1, ‘final‘, 0)这是我的django版本
apt-get install mysql-server mysql-client
apt-get install python-pip
pip install Django==1.7.1  #你也可以安装最新版本,不确定我写的程序能否正常运行  
apt-get install python-mysqldb 
pip install docker-py       #要调用docker api,所以要安装相关python包
apt-get install curl
apt-get install mysql-server
apt-get isntall mysql-client
sudo apt-get install libmysqlclient-dev 
apt-get install python-paramiko  #web程序中也会用到curl和paramiko
git clone https://github.com/SomethingCM/Web-for-docker.git 到本地
cd Web-for-docker/docker_demo
vim docker_demo/settings.py
#修改数据库配置
DATABASES = {
   ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘docker‘, #docker 库名
            ‘USER‘: ‘root‘,   #mysql登陆用户
            ‘PASSWORD‘: ‘dockerchen‘,#密码,如果mysql设置了用户名密码可以填写,没有则为空
            ‘HOST‘:‘‘,
            ‘PORT‘:‘‘,
        }
    }
#修改完以后创建表
./manage.py syncdb
#执行的时候会让你设置后台root用户密码,两次输入密码创建表成功
./manage.py runserver 0.0.0.0:80



初始化配置

在浏览器中输入 IP:port/admin 设置后台 IP为web服务器的ip


登陆后台admin初始化设置

技术分享
技术分享


添加仓库节点

技术分享

添加节点

技术分享
技术分享
技术分享

前台登陆

技术分享
技术分享
技术分享

编写dockerfile创建镜像

技术分享
技术分享

把现有容器打包成镜像

技术分享

创建容器

技术分享


本文出自 “cruisezhao” 博客,请务必保留此出处http://132408.blog.51cto.com/122408/1736647

Docker Web化管理实践

标签:docker

原文地址:http://132408.blog.51cto.com/122408/1736647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!