docker web化管理
背景
目前很多公司都在使用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原理图: [attach]645[/attach] 程序流程图: [attach]646[/attach]
原理
通过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,没有使用交换机提供dhcp1.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 openvswitch1.3 下载pipework:
git clone https://github.com/jpetazzo/pipework.git chmod +x pipework cp pipework /usr/bin/pipework1.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 [i]/5 [/i] [i] [/i] * 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 dhcpd1.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.service1.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" [size=16]#这里etcd我没有做成集群,每台docker机的数据就保存在本机的etcd库中,不与其他节点同步,也不需要提供其他节点访问,这里设置监听本机[/size] systemctl enable etcd systemctl start etcd2.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.53.1 web服务器 Django web程序下载地址
Web服务器系统我用的ubuntu,主要是安装软件简单,源及软件更新比较快
[quote]>> 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初始化设置 [attach]647[/attach] [attach]648[/attach] 添加仓库节点 [attach]649[/attach] 添加节点 [attach]650[/attach] [attach]651[/attach] [attach]652[/attach] 前台登陆 [attach]653[/attach] [attach]654[/attach] [attach]655[/attach] 编写dockerfile创建镜像 [attach]656[/attach] [attach]657[/attach] 把现有容器打包成镜像 [attach]658[/attach] 创建容器 [attach]659[/attach]
关于怎么用django+uwsgi发布网站这里就不叙述了
由于各种原因项目中途GAMEOVE了,没有具体的需求,不知道如何往下写了,有兴趣的朋友可以参考一下[/quote]