Docker虚拟化技术系列之-自动化部署管理
随着企业Docker容器越来越多,如果要靠手工去管理docker,肯定非常吃力,而且也不现实,这就需要我们把日常的操作变成自动化管理,通过脚本工具,将工作减轻到最小,解放运维人员,如下为企业Docker自动化部署脚本V1版本,如果需要更多其他的功能,可以自己定制和修改。
如下自动化管理脚本功能:
1)通过YUM自动安装Docker平台;
2)通过该脚本,可以自动配置桥接网络;
3)自动创建docker容器,基于centos操作系统;
4)自动收集创建好的Docker容器,集中管理;
5)通过PIPEWORK工具手动指定独立IP地址;
概要:该脚本能够自动安装并配置docker虚拟化及桥接网络,同时使用pipework这个软件来配置我们的容器IP,能够实现容器的一个简单的管理:
#!/bin/bash #auto install docker and Create VM #by jfedu.net wugk 2015-02-05 #Define PATH Varablies ####################### IPADDR=`ifconfig |grep "Bcast"|awk '{print $2}'|cut -d: -f2|grep "192.168"|head -1` GATEWAY=`route -n|grep "UG"|awk '{print $2}'|grep "192.168"|head -1` IPADDR_NET=`ifconfig |grep "Bcast"|awk '{print $2}'|cut -d: -f2|grep "192.168"|head -1|awk -F. '{print $1"."$2"."$3"."}'` LIST="/root/docker_vmlist.csv" if [ -f /etc/init.d/docker ];then sed -i -e '/^exec/d' -e '/^prog/aexec=\"/usr/bin/\$prog --storage-driver devicemapper --storage-opt dm.loopdatasize=2000G --storage-opt dm.loopmetadatasize=10G --storage-opt dm.fs=ext4 --storage-opt dm.basesize=40G\"' /etc/init.d/docker fi for i in `seq 1 253`;do ping -c 1 ${IPADDR_NET}${i} ;[ $? -ne 0 ]&& DOCKER_IPADDR="${IPADDR_NET}${i}" &&break;done >>/dev/null 2>&1 echo "##################" echo -e "Dynamic get docker IP,The Docker IP address\n\n$DOCKER_IPADDR" if [ ! -e /etc/sysconfig/network-scripts/ifcfg-eth0 ];then echo -e "\033[32mThe ifcfg-eth0 Interface is not exist,Please exit or change scripts.\nYou can to exec\nsed -i \'s/eth0/eth0/g\' $0\033[0m" exit 0 fi NETWORK=( HWADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $1}'` IPADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $2}'` NETMASK=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $3}'` GATEWAY=`route -n|grep "UG"|awk '{print $2}'` ) if [ -z "$1" -o -z "$2" ];then echo -e "\033[32m---------------------------------\033[0m" echo -e "\033[32mPlease exec $0 CPU(C) MEM(G),example $0 4 8\033[0m" exit 0 fi #CPU=`expr $2 - 1` #if [ ! -e /usr/bin/bc ];then # yum install bc -y >>/dev/null 2>&1 #fi CPU_ALL=`cat /proc/cpuinfo |grep processor|wc -l` if [ ! -f $LIST ];then CPU_COUNT=$1 CPU_1="0" CPU1=`expr $CPU_1 + 0` CPU2=`expr $CPU1 + $CPU_COUNT - 1` if [ $CPU2 -gt $CPU_ALL ];then echo -e "\033[32mThe System CPU count is $CPU_ALL,not more than it.\033[0m" exit fi else CPU_COUNT=$1 CPU_1=`cat $LIST|tail -1|awk -F"," '{print $4}'|awk -F"-" '{print $2}'` CPU1=`expr $CPU_1 + 1` CPU2=`expr $CPU1 + $CPU_COUNT - 1` if [ $CPU2 -gt $CPU_ALL ];then echo -e "\033[32mThe System CPU count is $CPU_ALL,not more than it.\033[0m" exit fi fi MEM_F=`echo $2 \* 1024|bc` MEM=`printf "%.0f\n" $MEM_F` DISK=40 USER=$3 REMARK=$4 ping $DOCKER_IPADDR -c 1 >>/dev/null 2>&1 if [ $? -eq 0 ];then echo -e "\033[32m---------------------------------\033[0m" echo -e "\033[32mThe IP address to be used,Please change other IP,exit.\033[0m" exit 0 fi if [ ! -e /etc/init.d/docker ];then rpm -e epel-release --nodeps rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install docker-io -y yum install device-mapper* -y mkdir -p /export/docker/ cd /var/lib/ ;rm -rf docker ;ln -s /export/docker/ . mkdir -p /var/lib/docker/devicemapper/devicemapper #dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=2000 /etc/init.d/docker start sed -i -e '/^exec/d' -e '/^prog/aexec=\"/usr/bin/\$prog --storage-driver devicemapper --storage-opt dm.loopdatasize=2000G --storage-opt dm.loopmetadatasize=10G --storage-opt dm.fs=ext4 --storage-opt dm.basesize=40G\"' /etc/init.d/docker if [ $? -ne 0 ];then echo "Docker install error ,please check." exit fi fi cd /etc/sysconfig/network-scripts/ mkdir -p /data/backup/`date +%Y%m%d-%H%M` yes|cp ifcfg-eth* /data/backup/`date +%Y%m%d-%H%M`/ if [ -e /etc/sysconfig/network-scripts/ifcfg-br0 ];then echo else cat >ifcfg-eth0 <<EOF DEVICE=eth0 BOOTPROTO=none ${NETWORK[0]} NM_CONTROLLED=no ONBOOT=yes TYPE=Ethernet BRIDGE="br0" ${NETWORK[1]} ${NETWORK[2]} ${NETWORK[3]} USERCTL=no EOF cat >ifcfg-br0 <<EOF DEVICE="br0" BOOTPROTO=none ${NETWORK[0]} IPV6INIT=no NM_CONTROLLED=no ONBOOT=yes TYPE="Bridge" ${NETWORK[1]} ${NETWORK[2]} ${NETWORK[3]} USERCTL=no EOF /etc/init.d/network restart fi echo 'Your can restart Ethernet Service: /etc/init.d/network restart !' echo '---------------------------------------------------------' cd - #######create docker container service docker status >>/dev/null if [ $? -ne 0 ];then /etc/init.d/docker restart fi NAME="Docker_`echo $DOCKER_IPADDR|awk -F"." '{print $(NF-1)"_"$NF}'`" #IMAGES=`docker p_w_picpaths|grep -v "REPOSITORY"|grep -v "none"|head -1|awk '{print $1}'` IMAGES=`docker p_w_picpaths|grep -v "REPOSITORY"|grep -v "none"|grep "nginx"|head -1|awk '{print $1}'` CID=$(docker run -itd --privileged --cpuset-cpus=${CPU1}-${CPU2} -m ${MEM}m --net=none --name=$NAME $IMAGES /bin/bash) if [ -z $IMAGES ];then echo "Plesae Download Docker Centos Images,you can to be use docker search centos,and docker pull centos6.5-ssh,exit 0" if [ ! -f /export/jfedu_new_base_img_6.5_v83_nginx.tar ];then echo "Please exec -it scp jfedu_new_base_img_6.5_v83_nginx.tar for docker server." exit fi docker load --input /export/jfedu_new_base_img_6.5_v83_nginx.tar fi if [ ! -f /usr/local/bin/pipework ];then yum install wget unzip zip -y wget https://github.com/jpetazzo/pipework/archive/master.zip unzip master cp pipework-master/pipework /usr/local/bin/ chmod +x /usr/local/bin/pipework rm -rf master fi ip netns >>/dev/null if [ $? -ne 0 ];then rpm -e iproute --nodeps wget -c https://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm rpm -ivh --nodeps --force iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm fi pipework br0 $NAME $DOCKER_IPADDR/24@$IPADDR docker ps -a |grep "$NAME" if [ ! -e $LIST ];then echo "编号,容器ID,容器名称,CPU,内存,硬盘,容器IP,宿主机IP,使用人,备注" >$LIST fi ################### NUM=`cat $LIST |grep -v CPU|tail -1|awk -F, '{print $1}'` if [[ $NUM -eq "" ]];then NUM="1" else NUM=`expr $NUM + 1` fi ################## echo -e "\033[32mCreate virtual client Successfully.\n$NUM `echo $CID|cut -b 1-12`,$NAME,$CPU1-$CPU2,${MEM}M,${DISK}G,$DOCKER_IPADDR,$IPADDR,$USER,$REMARK\033[0m" if [ -z $USER ];then USER="NULL" REMARK="NULL" fi echo $NUM,`echo $CID|cut -b 1-12`,$NAME,$CPU1-$CPU2,${MEM}M,${DISK}G,$DOCKER_IPADDR,$IPADDR,$USER,$REMARK >>$LIST rm -rf /root/docker_vmlist_* iconv -c -f utf-8 -t gb2312 $LIST -o /root/docker_vmlist_`date +%H%M`.csv
脚本演示效果如下:
如上提示结果,有ERROR错误提示,是因为当前系统已经有重名的Docker,但是IP地址不同,可以通过修改脚本避免该问题!没有任何报错,则创建Docker成功!
你若觉得作者的文章写得不错,请奖励作者几锭银子,让作者感受到来自你满满的鼓励和继续创作的动力!我们支持原创!鼓励原创!
打赏之后,文章底部显示参与打赏者的记录,可以直接通过微信扫描打赏哟,直接按打赏根据提示操作。
自定义打赏金额,友情提示打赏金额不要超过50元哦,土豪可以随意哦,51CTO谢谢您对作者的支持!谢谢你的慷慨大方!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
美团大数据平台架构实践
今天给大家介绍的内容主要包括以下四个部分首先是介绍一下美团大数据平台的架构,然后回顾一下历史,看整个平台演进的时间演进线,每一步是怎么做的,以及一些挑战和应对策略,最后总结一下,聊一聊我对平台化的看法。 谢语宸是来自美团的大数据构建平台的架构师。他在QCon2016北京站分享了一些整体上构建大数据平台的方法,除了聚焦在某一个点上的还有构建整体的大数据,以及各种各样技术的应用,希望能给大家一些关于大数据方面的启迪。 非常感谢给我这个机会给大家带来这个演讲,我是2011年加入美团,最开始负责统计报表还有数据仓库的建设。2012年推动了数据仓库分布式化,把分布式计算放到了Hadoop上,之后把数据开发流程放到了线上,2014年带离线平台团队。 我今天给大家介绍的内容主要包括以下四个部分首先是介绍一下美团大数据平台的架构,然后回顾一下历史,看整个平台演进的时间演进线,每一步是怎么做的,以及一些挑战和应对策略,最后总结一下,聊一聊我对平台化的看法。 1.美团大数据平台的架构 1.1总体架构: 上图是美团网数据体系组织架构图,上面每一个竖线都是数据开发业务线,...
- 下一篇
Jenkins持续集成案例之-自动化部署
Jenkins是一个开源软件项目,目的就是提供了一个开放的软件平台,让我们实现软件集成变成可能,我们经常听到企业中讲CI、CD两个名词,这些都可以跟jenkins联系在一起,实现持续集成,持续部署及持续交付; 在企业中,Jenkins一般都是批量部署多台web服务、或者应用程序、多个网站,今天带大家来学习一下Jenkins批量构建同一网站-多台服务器的操作案例: 一、Jenkins后台配置 1)点击工程名称-配置-构建后操作-设置Jenkins编译打包完后,war包存放的位置,如下图: 2)然后输入如下配置:**/target/*.war 3)如上-构建触发器-一个构建步骤,选择Add-post-build step-Excuteshell 4)然后把脚本内容写入即可 5)代码如下: rm-rf/root/.jenkins/workspace/jfedu/target/edu.war cp/root/.jenkins/workspace/jfedu/target/edu.war/root/.jenkins/jobs/jfedu/builds/lastSuccessfulBuild/ar...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7