使用云主机搭建docker平台第一篇(docker的搭建及私有镜像仓库的推送与拉取)

节点配置如下

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 "你学不会的"

 

 

 

 

 

 

 

 

 

 

----------------------END-----------------------

发布了42 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_36154886/article/details/89489413