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创建镜像
把现有容器打包成镜像
创建容器
时间: 2024-10-14 21:35:30