节点配置如下
Server节点 | server | 4G | 40G | 192.168.100.104 |
Client | client | 4G | 40G | 192.168.100.105 |
1)系统环境配置(全部节点)
第一步,先分别对两台云主机进行重命名(已设置主机名的可跳过)
[root@localhost ~]hostnamectl set-hostname client ##client节点
[root@localhost ~]hostnamectl set-hostname server ##server节点
然后配置内核转发(全部节点),命令如下
也可以使用vim工具进行编辑
echo -e "net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
填写完成之后保存退出,然后执行
sysctl -p #两个节点, 使配置生效
配置内核转发
然后就到配置域名解析(全部节点),在/etc/hosts配置文件写入两个节点的主机名与IP地址的映射关系,hosts解析
echo -e "10.0.0.100 server\n10.0.0.101 client" >> /etc/hosts
2)YUM仓库配置(全部节点)
配置完这些基础环境之后,我们就来配置YUM仓库吧
rm -rf /etc/yum.repos.d/* #删除原配置文件
vim /etc/yum.repos.d/ftp.repo #新建YUM源文件
name=centos
baseurl=ftp://192.168.100.10/centos/
gpgcheck=0
enabled=1
name=docker
baseurl=ftp://192.168.100.10/paas/docker/
gpgcheck=0
enabled=1
所以我们的docker平台搭建是需要CENTOS及PAAS镜像的YUM仓库的,配置完成之后验证一下
yum repolist
3)docker安装与配置(全部节点)
yum install -y docker #安装docker
安装完成之后,我们就直接启动该服务并设置开机自启
systemctl start docker #启动docker服务
systemctl enable docker #设置docker服务开机自启
4)配置REGISTRY仓库
首先我们找到docker镜像文件所在目录(看情况而定),我的是
cd /opt/paas/images/rancher1.6.5 #进入镜像存放目录
1)进入之后,从本地加载镜像到docker镜像服务,在这里我是从IAAS控制节点拿的,所以我就在iaas控制节点截图文件存放目录吧
docker load -i registry_latest.tar
解析:
docker load //从本地加载docker镜像
-i //–input string Read from tar archive file, instead of STDIN
从tar归档文件读取镜像,而不是标准输入流
registry_latest.tar //需要加载的docker镜像tar文件
2)启动一个registry容器
docker run -d -p 5000:5000 --restart=always --name registry docker.io/registry:latest ##server节点
命令解析:
docker run //运行(创建)一个容器
-d //创建之后可以在后台运行
-p 5000:5000 //端口映射,主机端口:容器端口(hostport:containerport),如果是大写P(无需指定端口)则是随机映射主机端口到特定容器端口
--restart=always // 不管退出状态码是什么始终重启容器。当指定always时,docker daemon将无限次数地重启容器。容器也会在daemon启动时尝试重启,不管容器当时的状态如何。
启动registry容器之后,我们就可以配置docker私有镜像仓库了
3)配置私有镜像仓库地址,我们需要添加的参数就是,
ADD_REGISTRY='--add-registry 192.168.100.104:5000'
INSECURE_REGISTRY='--insecure-registry 192.168.100.104:5000'
配置文件为
vim /etc/sysconfig/docker ##进入docker配置文件编辑
其中,192.168.100.104必须是运行registry容器的节点IP地址,请根据实际情况填写,其他参数不变
4)重置系统配置及docker服务
因为我们修改了docker的配置文件,所以我们需要重启&&重置一下服务才能应用修改后的服务,命令如下
systemctl daemon-reload #重置系统配置
systemctl restart docker #重启docker服务
docker info #查看docker信息
Registry:https://192.168.100.104:5000/v1/ //docker镜像仓库地址
从图中可以看到这个镜像地址已经是我们的本地镜像地址了!
5)加载(load),配置(tag:打标签)并推送(push)docker镜像文件,以及拉取(pull镜像)
首先我们先将rancher1.6.5文件夹里面的所有docker镜像文件加载并推送完成,后面的命令只拿一个镜像文件做解析
1:加载(load)
我们找到我们要上传的镜像文件存放目录,并进入该目录(自己解决),然后使用下面这个命令将你需要的docker镜像文件加载到docker镜像列表
例如我需要加载rancher_server_v1.6.5.tar文件,那么命令如下
docker load -i rancher_server_v1.6.5.tar #从本地加载rancher_server_v1.6.5.tar镜像文件
2:打标签(tag)
我们知道刚才上传了一个rancher_server_v1.6.5.tar镜像文件,所以这个docker镜像就是这个服务,那么既然我们已经知道了,那么我们就可以对这个镜像做一个tag(标签)操作了,命令格式如下所示
docker tag f89070da7581 192.168.100.104:5000/rancher/server:v1.6.5
//192.168.100.104为server云主机的浮动IP
命令解析:
docker tag ///docker服务对镜像打标签的一个管理命令
f89070da7581 ///选择需要执行tag命令的镜像ID
192.168.100.104:5000 ///指定一个私有镜像仓库地址
/rancher/ //设置该仓库的一个服务(汇总)类型
server: //设置这个镜像属于的功能(server)
v1.6.5 ////设置这个镜像服务文件的版本号
所以通过上面这个命令之后,我们原本的镜像列表已经可以看到没有 “ none” 的镜像了,取而代之的是
所以这个tag操作就算是完成了,所以这里面tag操作的一个格式就是
例如这个文件rancher_server_v1.6.5.tar
第一个“ _ ”改成“ / ”
最后一个“ _ ” 改成 “ : ”
也就是前面不管有多少个“ _ ”都改成“ / ” 而最后一个“ _ ”则改成“ :” 如果存在其他符合,例如“ – ”则无需更改
3:推送(push)
在上一步操作中,我们有个命令是
docker tag f89070da7581 192.168.100.104:5000/rancher/server:v1.6.5 ##对此镜像打标签
那么我们这个push操作可以直接套用这条命令,很简单,只需要改一下操作(tag)指令就行了,命令如下
docker push 192.168.100.104:5000/rancher/server:v1.6.5 ##推送这个镜像到私有docker仓库(Registry)
按照这个方法对全部镜像进行操作就O了
最后附上一个脚本
#!/bin/bash
#Selinux-Config()
{
if [ -z `cat /etc/sysconfig/selinux|grep SELINUX=disabled` ];then
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
read -p "reboot server[y/n]" re
if [ "$re == y " ];then
reboot
fi
fi
}
#Config-info()
{
read -p "input--For_Server-Host——IP: " server
read -p "Server_Host is Registry_Host[y/n]" regis
read -p "input--For_client-Host-IP: " client
read -p "input--Centos_Yum__Path:" yumc
read -p "input--Ddocker_Yum__Path:" yumd
read -p "The Is Server_Host[y/n]" host
read -p "input--Server_Pass" spass
read -p "是否需要配置SSH免密钥登录[y/n]" sshm
echo -e "wa"
}
#环境判断
{
if [ $host == y ];then
hostnamectl set-hostname server
else
read -p "请输入这个节点的主机名[默认client]" zhuji
if [ -z "$zhuji" ];then
zhuji=client
fi
hostnamectl set-hostname client
fi
if [ -z `ls /etc/|grep hosts.bak` ];then
cp /etc/hosts /etc/hosts.bak
else
echo o
fi
if [ $regis == y ];then
regis=$server
else
read -p "input_Registry-Server_IP" regis
fi
}
#环境配置
{
if [ -z `systemctl stop firewalld` ];then
yum remove -y firewalld
fi
iptables -F
iptables -X
iptables -Z
/usr/sbin/iptables-save
echo -e "net.ipv4.ip_forward = 1\nnet.ipv4.conf.default.rp_filter = 0 \nnet.ipv4.conf.all.rp_filter = 0" > /etc/sysctl.conf
sysctl -p
}
#通讯配置
{
rm -rf /etc/yum.repos.d/*
echo -e "[centos]\nname=centos\nbaseurl=$yumc\ngpgcheck=0\nenabled=1" > /etc/yum.repos.d/centos.repo
echo -e "[docker]\nname=docker\nbaseurl=$yumd\ngpgcheck=0\nenabled=1" >> /etc/yum.repos.d/docker.repo
echo -e "$server server\n$client client" >> /etc/hosts
yum clean all
yum repolist
read -p "是否继续[按回车继续]" cuo
if [ $sshm == y ];then
yum install -y expect
expect -c "
spawn ssh-keygen -t rsa
expect \"Enter file in which to save the key (/root/.ssh/id_rsa):\"
send \"\r\"
expect \"Overwrite (y/n)? y\"
send \"y\r\"
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
expect eof
"
if [ "$host" == y ];then
expect -c "
spawn scp /root/.ssh/id_rsa.pub ${client}:/root/.ssh/authorized_keys
expect \"password:\"
send \"$spass\r\"
expect eof
"
else
expect -c "
spawn scp /root/.ssh/id_rsa.pub ${server}:/root/.ssh/authorized_keys
expect \"password:\"
send \"$spass\r\"
expect eof
"
fi
fi
}
#服务配置
{
yum install -y docker
if [ -z `ls /etc/sysconfig/|grep docker.bak` ];then
cp /etc/sysconfig/docker /etc/sysconfig/docker.bak
fi
echo -e "ADD_REGISTRY='--add-registry ${regis}:5000'\nINSECURE_REGISTRY='--insecure-registry ${regis}:5000'" >> /etc/sysconfig/docker
chmod +x /usr/local/bin/docker-compose
chmod 600 /root/.ssh/authorized_keys
systemctl daemon-reload
#--------------????--------------------#
if [ -z `systemctl restart docker` ];then
echo -e "docker.service Runing.."
systemctl enable docker
else
echo -e "docker.service Stopd"
exit 0
fi
docker info
}
Registry_Config
{
if [ $host == y ];then
if [ -z `ls | grep registry|` ];then
echo -e "当前目录未找到registry_latest.tar文件"
read -p "请输入registry:latest.tar存放路径" dir
pushd $dir
docker load -i registry_latest.tar
docker run -d -p 5000:5000 --restart=always --name registry docker.io/registry:latest
read -p "Docker镜像文件是否存在多个目录[y/n]" cz
if [ "$cz" == y ];then
read -p "请输入目录个数" nuber
for ((i=1;i<=$nuber;i++));do
read -p "请输入第$i个存放路径" dir${i}
done
fi
fi
fi
}
#images>load>tag>push
{
if [ $host == y ];then
for ((i=1;i<=$nuber;i++));do
dir="dir$i"
pushd dir$i
if [ -z `ls|grep rancher_kopf` ];then
echo "配置中"
else
mv rancher_kopf:v0.4.0.tar rancher_kopf/v0.4.0.tar
fi
for filename in `ls *.tar`;do
name=`basename $filename .tar |sed 's/\(.*\)_/\1:/g'|sed 's/.tar//g'|sed 's#_#/#g'`
echo $filename >> history.conf
echo -e "正在配置$filename文件"
docker load -i $filename
echo $(docker tag $(docker images|grep none|awk '{print $3}') ${regis}:5000/$name|sed 's/_/\//g')
docker push ${regis}:5000/$name|sed 's/_/\//g'
ssh $client -o "docker pull $name|sed 's/_/\//g'"
if [ -z $(docker images|grep none|awk 'END{print NR}') ];then
echo "存在未Tag镜像,已终止"
echo "配置记录已写入history.conf文件"
echo "执行cat history.conf即可查阅"
echo "洗洗睡吧,你学不会的"
exit
else
echo "正在配置下一个"
fi
done
done
fi
}
#shell_FOr-pull
{
if [ "$host" == y ];then
rm -rf docker-pull.sh
gg=$(docker images|grep 5000|awk 'END{print NR}')
for ((i=1;i<=$gg;i++));do
echo -e "docker pull $(docker images|awk "NR==$i{print}"|awk '{print $1,$2}'|sed 's/ /:/g')" >> docker-pull.sh
done
echo -e "拉取脚本已写成,请复制docker-pull.sh到拉取节点执行"
fi
}
echo -e "你学不会的"