开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署

整体可分为以下几个步骤:
1,创建springboot项目
2,搭建docker私服库
3,build镜像并上传到私服库
4,搭建docker swarm集群
5,搭建jenkins并构建部署

演示系统使用centos7,jdk1.8



1,创建Springboot项目:
在eclipse上新建maven项目,在pom.xml中引入相应的包,如下所示:


4.0.0 com.spring mySpringboot 0.0.1-SNAPSHOT jar mySpringboot http://maven.apache.orgorg.springframework.boot spring-boot-starter-parent 1.3.0.RELEASE UTF-8 1.8 ramer org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin 1.3.0.RELEASE repackage com.spotify docker-maven-plugin 0.4.13 build-imagepackage build docker私服库的地址与端口/learn:mySwarm true docker.io/java ["java", "-jar","/${project.build.finalName}.jar"] / ${project.build.directory} ${project.build.finalName}.jar


2, 搭建docker私服库 2.1 下载安装docker环境 直接使用在线安装,在终端输入命令: yum install docker
下载完成后启动docker服务:service docker start
成功启动后输入:docker version查看docker信息,如下图所示:
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


2.2 docker常用命令 docker run :执行镜像生成容器
docker ps –a:查看所有容器
docker pull:拉取镜像
docker push:上传镜像
docker start:运行容器
docker stop:停止容器
docker rm:删除容器
docker rmi:删除镜像
docker logs:查看容器日志
docker tag:修改镜像名
docker images:查看所有镜像
以上是平时用的比较多的docker命令,想了解更多的命令请百度

2.3 拉取私服库镜像
在终端输入: docker pull registry
把镜像下载完后修改镜像名:
docker tag docker.io/:registry192.168.230.10:5000/learn:registry
说明:docker tag后面分为两部分中间以空格隔开,空格的左边是要修改的原始镜像,右边是修改后的镜像,每个镜像名的组成都由registry + tag形成唯一标识,例如192.168.230.10:5000/learn这个是镜像存放的具体路径,registry这个是镜像标签名tag,必须要按照这种格式命名,否则无法上传到私服库
修改镜像名后输入: docker run -p 192.168.230.10:5000:5000 -v/opt/data/registry:/var/lib/registry -i -t -d docker.io/registry
生成并运行容器,这样一个docker私服库就已经搭建好了

我们把刚才修改镜像名后的镜像上传到docker私服库
docker push 192.168.230.10:5000/learn:registry
这里会报错,编辑配置文件::
vi /etc/docker/daemon.json
添加内容:"insecure-registries":["docker私有库的地址"]

设置搭建好的docker私服库IP与端口
再次push刚才的镜像,成功上传
输入: curl http://192.168.230.10:5000/v2/_catalog可以查询私服库信息,如下图所示
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


learn就是私服库存放镜像的文件夹,再查询这个文件夹下的镜像,输入:
curl http://192.168.230.10:5000/v2/learn/tags/list 开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片



通过docker pull拉取镜像,如:docker pull 192.168.230.10:5000/learn:registry
这里是拉取私服库中的镜像,根据你的镜像命名去私服库中查找,如果只提供了tag名则默认去docker官方的仓库中拉取,如我们之前拉取的服务库镜像,docker pull registry

3,build镜像并上传到私服库 3.1 build镜像并上传到dock服务器
回到我们之前创建的springboot项目,找到本地项目根目录,如我的是D:\springbootTest\mySpringboot
打开cmd进入到此目录中输入以下命令:
mvn clean package docker:build,如下图所示
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


注意:这里会报错,原因是本地没有安装docker,无法执行docker命令

3.2 获取docker命令
通常有2种情况获取docker命令
1,本地安装docker
2,开启docker远程api
这里我们使用之前安装好的docker环境
1,先在本地环境变量中加入docker_host变量,如下图所示
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片

2,然后在docker服务中,编辑配置文件
vi /lib/systemd/system/docker.service,如下图所示在红框位置添加红框内的内容
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片

然后重启docker
systemctl daemon-reload
systemctl restart docker.service
再在cmd中执行mvn clean package docker:build,还是会报错,原因是对应的2375端口没有被开放,进入到/sbin目录中执行 iptables -I INPUT -p tcp --dport 2375 -j ACCEPT然后再次打包,成功上传
然后在docker服务器输入docker images可以看到镜像已经上传到服务器,然后通过
docker push命令把镜像上传到私服库
4,搭建docker swarm集群 为了演示,我们用两台服务器就好了
192.168.230.10(主)
192.168.230.11(从)
4.1 pull docker swarm镜像 在主机上执行:docker pull swarm,安装swarm插件
安装好插件后执行:
docker swarm init --advertise-addr192.168.230.10 初始化一个集群的master服务器
返回以下信息:
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


记住这里的token 这个token是集群的唯一标识,只有根据这个token才能加入docker集群中
然后在从机上输入:
docker swarm join --token SWMTKN-1-5fli7xt3s4hbt3pghkmaosgz98ttvmnd1t5lolnkfn446s6gpj-15893cufutsyuc7ewg89iwhz3 192.168.2.10:2377
使服务器加入到这个docker集群中
然后在主机上输入
docker node ls 查看集群的信息,如下图
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


可以看到标识有leader的是集群的master服务器,其他的是从机

4.2 docker swarm常用命令
Docker swarm init:初始化一个集群
Docker swarm join:加入一个集群
Docker node ls:查看集群的信息
Docker service create:创建一个集群服务
Docker service ls:查看集群的服务
Docker service rm:删除一个集群服务
还有更多swarm命令,请百度

4.3 部署一个docker swarm集群项目
用之前从docker私服库中拉取的镜像,在主机上输入:
docker service create –replicas 2 –p8000:8000 –name mySwarm 192.168.230.10:5000/learn:mySwarm
这样就创建了一个docker swarm集群服务,这里的replicas是部署几台服务器,swarm集群会先从本地找有没有对应的镜像,如果有则直接run该镜像,如果没有则从docker私服库上拉取,然后一个服务器一个服务器run镜像生成容器
然后输入docker service ls:可以看到目前服务的情况
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


这样,我们就简单的初步实现了一个docker swarm的集群
5,搭建jenkins并构建部署 5.1 拉取镜像 直接在终端机(jenkins可随意搭建在任意一台服务器)输入:
Docker pull Jenkins
下载完镜像后输入;
docker run -p 8080:8080 -e"DOCKER_HOST=tcp://192.168.230.10:2375" --name myJenkins -u root -v/jenkins/:/var/jenkins_home -d docker.io/jenkins
这里的docker_host跟前面说的原理一样,因为jenkins镜像run出来的容器本身是没有安装docker的,所以我们直接从docker服务器获取docker命令
【开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署】这里的-u root是为了把当前运行jenkins的用户换做root
然后输入docker ps –a可以发现容器并没有跑起来,输入docker logs + 容器ID,查看容器日志提示没有权限,输入setenforce 0 然后再执行容器就成功run起来了

5.2 配置jenkins
Jenkins的初始化请参照百度,这里就不重复了
注意:run完之后浏览器输入localhost:8080出现jenkins界面的时候在安装插件步骤可能会报以下错误:

No such plugin: cloudbees-folder 是在jenkins镜像run的过程中,这个插件下载失败,可以浏览器输入
localhost:8080/restart 先跳过这个步骤,然后重新去启动jenkins,如果还不行就跳过这个步骤后自己上传手动下载的插件

先安装要用到的插件,进入系统管理-管理插件-可选插件,在搜索框中输入要安装的插件
MavenIntegration plugin
这个插件是为了可以新建一个maven项目
PublishOver SSH
这个插件是为了jenkins构建完之后远程登录到docker swarm集群中的master机器统一部署
配置 SSH:
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片




参照百度生成秘钥的方式生成公钥和私钥,
http://blog.csdn.net/u010947098/article/details/61922969
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片



然后我们生成一个maven项目,配置如图所示:
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片



开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片





Exec command中的命令:
docker service rm mySwarm;
先删除旧的服务
docker rmi 192.168.230.10:5000/learn:mySwarm;
然后删除旧的镜像
docker service create --replicas 2 -p8000:8000 --name mySwarm 192.168.230.10:5000/learn:mySwarm
新建新的服务

配置完之后点击立即构建,第一次构建会下载很多包,需要一点时间,请耐心等待,最终如下图所示:
先成功build镜像
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


然后push镜像到docker私服库
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片


构建完成后通过SSH登录到docker swarm集群的master统一部署代码
开发工具|SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
文章图片




至此整个流程就结束了,还有很多细节需要完善….


    推荐阅读