CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署
1.什么是docker-machine
讲了docker-compose,主要是在一台服务器上编排镜像与容器。假如现在要求在两台服务器上部署容器,一般的做法是登陆到两台服务器分别部署,听起来也没问题。但如果从两台服务器增加到10台,就特别麻烦,这种情况下,docker-machine出现了。有了docker-machine之后,就可以很方便的在多台服务器上部署。
2.安装
现在有两台服务器,我们要实现通过服务器a把镜像部署到服务器b
服务器a安装docker-machine,执行命令
base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -l $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine
验证安装成功
3.服务器a创建ssh密钥对,并发到服务器b上
[root@cys-test-centos ~]# ssh-keygen
所有选项都直接回车
[root@cys-test-centos ~]# ssh-copy-id xx.x.x.x #xx.x.x.x为服务器b的ip
至此,实现了服务器a到b的免密登陆
4.docker-machine创建主机
在服务器a上输入
docker-machine create -d generic --generic-ip-address=xx.x.x.x host1 #xx.x.x.x为服务器b的ip
这个过程会花费一些时间,等着就是了。
安装完成,通过docker-machine ls查看列表
也可以登陆到服务器b上,查看docker是否安装完成(docker-machine会给远程服务器b安装docker)
5.变更服务器a的环境变量
变更之后,接下来的操作都将应用与服务器b
6.安装一个测试镜像
并去服务器b上校验
至此,docker-machine安装完毕,这样我们就可以通过一台服务器,创建多个主机,快速部署docker。但还是有点不方便,我们每次都要执行docker命令,为了解决这个问题,我们可以结合jinkins,实现自动部署。
7.设计jenkins+docker自动化部署
下面开始实现这个想法。
1)在docker hub上新建一个账号(docker hub是一个可以上传自己的镜像的云端网站,作用与github相对于代码一样),测试账号登陆,并推送镜像
这样我们就可以把本地的镜像上传到docker hub,别人就可以拉取然后运行
上一章,我们新建了两个镜像
我们把webdocker_s_provider推送到docker hub
首先要进行tag打标签,格式如下 docker tag 镜像名 dockerhub用户名/镜像名,然后push,格式 docker push 新的镜像名
推送成功,我们登陆到dockerhub 查看一下
我们可以登陆到服务器b,拉取一下,验证成功
2)创建项目,并创建dockerfile
dockerfile内容如下:
from microsoft/dotnet:2.1-aspnetcore-runtime maintainer yishi.chen label description="microservice" label version="1.0" arg microport workdir /app copy bin/release/netcoreapp2.0/publish/ . expose $microport entrypoint ["dotnet","microservice.dll"]
3)我们将.netcore代码上传到github(或私有git库,svn私有库)
4)安装jenkins
5)jenkins中新建一个freestyle project
6.jenkins中配置新建的freestyle project
详细配置
dotnet publish -c release docker build -t microtest:1.0 --build-arg microport=1000 -f "$workspace/microservice/dockerfile" "$workspace/microservice" docker login -u *** -p **** docker tag microtest:1.0 chenyishi/microtest:1.0 docker push chenyishi/microtest:1.0 /usr/local/bin/docker-machine env host1 eval $(/usr/local/bin/docker-machine env host1) docker pull chenyishi/microtest:1.0 docker run -d -p "1000:1000" -e microport=1000 chenyishi/microtest:1.0
保存后,点击buildnow
等待build成功,去dockhub上验证时候推送成功,去服务器b查看是否拉取成功
至此,实现了一个简单的跨主机的简单部署