linux 批量部署docker环境

温馨提示:docker必须安装在linux 3.8以上的内核版本才支持

前期环境准备

1.一台全新的redhat6.6操作系统

2.禁用selinux

由于Selinux和LXC有冲突,所以需要禁用selinux.编辑/etc/selinux/config,设置两个关键变量.

SELINUX=disabled

SELINUXTYPE=targeted

[root@139 ~]# setenforce 0

3.安装fedora源

[root@139 ~]# cd /etc/yum.repos.d/
[root@139 yum.repos.d]# wget http://www.hop5.in/yum/el6/hop5.repo

4.升级内核

[root@139 ~]# yum install kernel-ml-aufs kernel-ml-aufs-devel

修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)

[root@139 ~]# sed -i ‘10y/1/0/‘ /etc/grub.conf  修改/etc/grub.conf文件,有时也可修改/boot/grub/grub.conf文件

[root@139 ~]# sync;reboot

[root@139 ~]# uname -r       完全重启后执行uname -r,查看是否已经是3.10内核
3.10.5-3.el6.x86_64

[root@139 ~]# grep aufs /proc/filesystems    执行grep aufs /proc/filesystems,查看内核是否支持aufs
nodev aufs

[root@139 ~]# yum install -y device-mapper-libs libcgroup* docker-io*   安装docker所需要的安装包,依次如下图所示,其中包括依赖关系

技术分享

[root@139 ~]# service docker restart;chkconfig docker on  启动docker服务,并设置为开机自启动

 

以下是我个人在测试环境中模拟并且实现自动化批量部署docker环境的脚本,由于shell基础较弱,脚本内容比较繁琐,希望大神能提出宝贵意见和优化脚本内容,谢谢!

[root@139 dockerr]# cat 5.sh
#!/bin/bash
dir=/dockerr          /
passwd=‘redhat‘
for i in `seq 149 150`
do
/usr/bin/expect <<-EOF
set time 300
spawn ssh [email protected]$i
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*#"
send "mkdir -p $dir/log/;cd $dir\r"
send "scp 192.168.1.139:$dir/package/* $dir\r"
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*#"
send "sh $dir/docker.sh >$dir/log/log1$i 2>&1\r"
send "scp $dir/log/log1$i 192.168.1.139:$dir/log/log1\r"
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*#"
send "sync;reboot\r"
send "exit\r"
interact
expect eof
EOF
done

[root@139 package]# cat docker.sh
#!/bin/bash
#this is a docker shell
dir=/dockerr
cd $dir
rpm -Uvh kernel-ml*.rpm
sed -i ‘10y/1/0/‘ /etc/grub.conf
if [ $? -eq 0 ]
 then
 echo "-----------true----------"
else
 sed -i ‘10y/0/0/‘ /etc/grub.conf
grep  default=0 /etc/grub.conf
fi

[root@139 dockerr]# cat 55.sh
#!/bin/bash
dir=/dockerr
passwd=‘redhat‘
for i in `seq 149 150`
do
/usr/bin/expect <<-EOF
set time 300
spawn ssh [email protected]$i
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*#"
send "cd $dir;sh $dir/docker2.sh >$dir/log/log2$i 2>&1\r"
send "scp $dir/log/log2$i 192.168.1.139:$dir/log/log2\r"
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect "*#"
send "exit\r"
interact
expect eof
EOF
done

 

[root@139 package]# cat docker2.sh

#!/bin/bash

#this is a about install docker file

dir=/dockerr

cd $dir

uname -r | grep 3.10.5*

if [ $? -eq 0 ]

 then

echo "-----new kernel is 3.10------"

grep aufs /proc/filesystems

grep aufs /proc/filesystems
 if [ $? -eq 0 ]
 then
echo "##### Being  installing rpm package##### "
rpm -Uvh device-mapper-* lvm2-* lua* lxc* docker-io*
service docker restart
chkconfig docker on
echo "-----the docker is installed successfully-----"
 else
  exit 1
fi
 else
echo "-----new kernel is not load-----"
 exit 2
fi

由于本人比较愚笨,总过写了4个简单的脚本才实现的批量部署,依次在本地执行第一个5.sh脚本,待完全重启后,执行第二个脚本55.sh才实现的部署,注意,执行脚本之前需要将对应的文件放在对应的路径下,希望国人帮我优化脚本内容。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。