使用Docker构建持续集成与自动部署的Docker集群
2016-11-21 14:54
891 查看
为什么使用Docker
“
从我个人使用的角度讲的话部署来的更方便
只要构建过一次环境推送到镜像仓库迁移起来也是分分钟的事情
虚拟化让集群的管理和控制部署都更方便
hub.docker.com里面的镜像也很方便节约了很多自己生成镜像的时间
相当于提高了复用率
”
安装Docker
“
我这里使用Ubuntu14.04系统上安装
?
Ubuntu其他版本可能需要先升级一下内核
详细可参考这里
”
构建持续集成环境(Java)
下来开始我们今天的主题构建持续集成与自动部署的Docker集群
“
持续集成的目的
让我们每次更新了代码提交到git仓库后就自动运行测试构建新版本自动部署到测试或集群从来提高生产效率告别重复的劳动
”
持续集成和部署的原理
“
我们用到的所有基础设施我们都将使用Docker部署
1.推送到git仓库
2.jenkinepullgit代码运行编译镜像进行编译
3.打包生成的代码生成一个新版本的镜像推送到仓库删除当前容器重新运行新版本镜像
4.监控系统
5dockerlog集中管理LEK
本文使用的是Java的构建方式除了第三步以外其他工程也都是一样的
”
构建Gitlab
“
Gitlab作为代码仓库是我们环节的第一步(如果使用github或oscgit可以跳过这个步骤)
为了方便构建我们先安装一下docker编配工具Docker-compose
?
一般构建依赖关系比较复杂的容器都可以用docker-compose来配置
使用说明可以看一下这里
我们使用hub.docker.com的sameersbn/gitlab镜像来快速构建
docker-compose.yml文件如下
?
?
运行dockerps查看一下可以看到已经启动成功了
访问一下启动主机的你映射的端口即可访问我这里是80
”
构建Docker私有仓库
“
同样我们还需要一个Docker仓库来存放我们发布的镜像版本(使用公有仓库如dockerhub可以跳过此步骤)
我们采用官方镜像registry运行
运行如下命令即可
?
运行dockerps即可查看运行情况
相应命令
?
问题
docker私有仓库拉取/推送失败提示不能使用http连接
方法1设置仓库https证书即可推荐详情可见
方法2在docker启动参数里面添加–-insecure-registry0.0.0.0/0然后重启docker
”
构建Jenkins
“
我们使用jenkins来持续集成
构建同样十分简单我们使用的是hub.docker.com的jayqqaa12/jenkins镜像
执行命令
?
参数说明:
?
?
然后访问8080端口就可以了
默认用户密码adminadmin
”
Docker-Swarm集群
“
我们使用Docker-Swarm来部署docker集群
部署同样十分简单
?
?
如图可见当前集群有一个节点
在集群运行容器
同理只要在添加-H管理节点的ip:2376就可以在集群上运行容器了
?
”
HelloWorld
“
基础的设施我们已经搭建好了下面我们就可以开始测试一下
1)这里我新建了一个javaEEmaven项目很简单写了一个index.html
2)在gitlab新建一个docker-hello-world项目仓库
3)编写打包镜像的Dockerfile和部署到集群的脚本(放在当前项目里面就可以了)
Dockerfile
很简单的步骤把编译好的war放入镜像就可以了
这里使用的是官方tomcat镜像
?
build.sh部署使用的脚本
?
4)在jenkins上新建一个docker-hello-world项目
选择自由风格即可
设置一下git仓库地址
设置一下触发器为了方便起见这里设置每分钟拉取一下也可以设置一下gitlabhook
同时设置一下构建要执行的脚本就执行我们刚才写好的脚本即可
5)那么开始推送到我们的仓库
然后查看jenkinsconsole就可以看到执行的过程了已经看到已经执行成功了
访问一下已经部署到集群了(关于集群的负载均衡部署这里就不讲了)
6)更新版本
修改一下index.html然后再次推送
等待2~3分钟后我们就可以看到已经重新部署成功了就是怎么简单
问题1为什么要把war包打包进容器而不是挂载新的war包
解答:docker的理念是一个整体一个整体的运行环境而不是单纯的war包更适合整体迁移
问题2:这样镜像不会很大么下载会不会很不方便
解答:因为docker的镜像是多层依赖的所以除了第一次下载慢一点以后都会复用之前相同的层
所以下载的是不同的部分在本实例中只是war包的部分
”
Docker管理监控系统
“
如何管理容器查看容器运行情况日志等都不太方便我们需要搭建一个监控平台
这里我们采用csphere的docker管理平台、
在管理节点执行以下命令就可以安装了管理程序
?
在集群的节点安装Agent
访问controllerA主机的1016端口点击左侧的“主机”菜单,进入主机列表页面,
点击添加主机并复制脚本,在Agent主机安装Agent程序
然后就可以查看和管理docker容器了具体查看文档这里就不多提了
“
从我个人使用的角度讲的话部署来的更方便
只要构建过一次环境推送到镜像仓库迁移起来也是分分钟的事情
虚拟化让集群的管理和控制部署都更方便
hub.docker.com里面的镜像也很方便节约了很多自己生成镜像的时间
相当于提高了复用率
”
安装Docker
“
我这里使用Ubuntu14.04系统上安装
1 | curl-shttps: //get .docker.io /ubuntu/ | sudo sh |
详细可参考
”
构建持续集成环境(Java)
下来开始我们今天的主题构建持续集成与自动部署的Docker集群
“
持续集成的目的
让我们每次更新了代码提交到git仓库后就自动运行测试构建新版本自动部署到测试或集群从来提高生产效率告别重复的劳动
”
持续集成和部署的原理
“
我们用到的所有基础设施我们都将使用Docker部署
1.推送到git仓库
2.jenkinepullgit代码运行编译镜像进行编译
3.打包生成的代码生成一个新版本的镜像推送到仓库删除当前容器重新运行新版本镜像
4.监控系统
5dockerlog集中管理LEK
本文使用的是Java的构建方式除了第三步以外其他工程也都是一样的
”
构建Gitlab
“
Gitlab作为代码仓库是我们环节的第一步(如果使用github或oscgit可以跳过这个步骤)
为了方便构建我们先安装一下docker编配工具Docker-compose
1 2 3 | #使用python包管理工具pip安装 apt-get install python-pippython-dev pip install -Udocker-compose |
使用说明可以看一下
我们使用hub.docker.com的
docker-compose.yml文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | gitlab: image:sameersbn /gitlab ports: - "22:22" - "80:80" links: -gitlab-redis:redisio -gitlab-postgresql:postgresql environment: -GITLAB_PORT=80 -GITLAB_SSH_PORT=22 -GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string restart:always gitlab-redis: image:sameersbn /redis restart:always gitlab-postgresql: image:sameersbn /postgresql :9.4-12 environment: -DB_NAME=gitlabhq_production -DB_USER=gitlab -DB_PASS=password restart:always |
1 2 | #执行如下命令就可以构建gitlab了 docker-composeup-d |
访问一下启动主机的你映射的端口即可访问我这里是80
”
构建Docker私有仓库
“
同样我们还需要一个Docker仓库来存放我们发布的镜像版本(使用公有仓库如dockerhub可以跳过此步骤)
我们采用官方镜像
运行如下命令即可
1 2 | dockerrun-d--restart=always--nameregistry\ - v /mnt/docker/registry : /tmp/registry -p5000:5000registry |
相应命令
1 2 | dockerpull仓库ip:仓库端口/项目名拉取镜像 dockerpush仓库ip:仓库端口/项目名推送镜像 |
docker私有仓库拉取/推送失败提示不能使用http连接
方法1设置仓库https证书即可推荐
方法2在docker启动参数里面添加–-insecure-registry0.0.0.0/0然后重启docker
”
构建Jenkins
“
我们使用jenkins来持续集成
构建同样十分简单我们使用的是hub.docker.com的jayqqaa12/jenkins镜像
执行命令
1 2 3 | dockerrundockerrun-d-p8080:8080\ --namejenkins--restart=always- v /mnt/jenkins_home : /var/jenkins_home \ - v /var/run/docker .sock: /var/run/docker .sockjayqqaa12 /jenkins |
1 2 | - v /mnt/jenkins_home : /var/jenkins_home #映射到本地磁盘 |
1 2 | - v /var/run/docker .sock: /var/run/docker .sock #映射主机的docker到容器里面这样在容器里面就可以使用主机安装的docker了 |
默认用户密码adminadmin
”
Docker-Swarm集群
“
我们使用Docker-Swarm来部署docker集群
部署同样十分简单
1 2 3 4 5 6 7 8 9 10 | #运行这个这个命令后会返回一个token来替换下面命令的<token> dockerrun-- rm swarmcreate #运行节点管理集群swarm来管理所有节点 dockerrun-d--nameswarm-manage--restart=always-p\ 2376:2375swarmmanagetoken: // <token> #在节点服务器上运行添加节点到集群中 dockerrun-d--restart=always--nameswarm-agentswarm\ join --addr=当前服务器的ip:2375token: // <token> |
1 2 3 | #查看集群的节点信息 docker-H管理节点的ip:2376info |
在集群运行容器
同理只要在添加-H管理节点的ip:2376就可以在集群上运行容器了
1 2 | docker-H管理节点的ip:2376runxxx #运行容器 docker-H管理节点的ip:2376 ps xxx #查看集群容器运行情况 |
HelloWorld
“
基础的设施我们已经搭建好了下面我们就可以开始测试一下
1)这里我新建了一个javaEEmaven项目很简单写了一个index.html
2)在gitlab新建一个docker-hello-world项目仓库
3)编写打包镜像的Dockerfile和部署到集群的脚本(放在当前项目里面就可以了)
Dockerfile
很简单的步骤把编译好的war放入镜像就可以了
这里使用的是官方
1 2 3 | FROMtomcat:8-jre8 RUN rm -rf /usr/local/tomcat/webapps ADD. /target/ROOT .war /usr/local/tomcat/webapps/ROOT .war |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/bin/bash #buildinjenkins #你的docker仓库的地址 REG_URL=XXX #你的swarmmanage节点的地址 SWARM_MANAGE_URL=xx:2376 #根据时间生成版本号 TAG=$REG_URL/$JOB_NAME:` date +%y%m%d-%H-%M` #使用maven镜像进行编译打包出war文件(其他语言这里换成其他编译镜像) dockerrun-- rm --namemvn- v /mnt/maven : /root/ .m2\ - v /mnt/jenkins_home/workspace/ $JOB_NAME: /usr/src/mvn -w /usr/src/mvn/ \ maven:3.3.3-jdk-8mvnclean install -Dmaven. test .skip= true #使用我们刚才写好的放在项目下面的Dockerfile文件打包 dockerbuild-t$TAG$WORKSPACE/. dockerpush$TAG dockerrmi$TAG #如果有以前运行的版本就删了 if docker-H$SWARM_MANAGE_URL ps -a| grep -i$JOB_NAME; then docker-H$SWARM_MANAGE_URL rm -f$JOB_NAME fi #运行到集群 docker-H$SWARM_MANAGE_URLrun-d-p80:8080--name$JOB_NAME$TAG |
选择自由风格即可
设置一下git仓库地址
设置一下触发器为了方便起见这里设置每分钟拉取一下也可以设置一下gitlabhook
同时设置一下构建要执行的脚本就执行我们刚才写好的脚本即可
5)那么开始推送到我们的仓库
然后查看jenkinsconsole就可以看到执行的过程了已经看到已经执行成功了
访问一下已经部署到集群了(关于集群的负载均衡部署这里就不讲了)
6)更新版本
修改一下index.html然后再次推送
等待2~3分钟后我们就可以看到已经重新部署成功了就是怎么简单
问题1为什么要把war包打包进容器而不是挂载新的war包
解答:docker的理念是一个整体一个整体的运行环境而不是单纯的war包更适合整体迁移
问题2:这样镜像不会很大么下载会不会很不方便
解答:因为docker的镜像是多层依赖的所以除了第一次下载慢一点以后都会复用之前相同的层
所以下载的是不同的部分在本实例中只是war包的部分
”
Docker管理监控系统
“
如何管理容器查看容器运行情况日志等都不太方便我们需要搭建一个监控平台
这里我们采用csphere的docker管理平台、
在管理节点执行以下命令就可以安装了管理程序
1 2 | curl-SsL-o /tmp/csphere-install .shhttps: //csphere .cn /static/csphere-install-v2 .sh sudo env ROLE=controllerCSPHERE_VERSION=1.0.1 /bin/sh /tmp/csphere-install .sh |
访问controllerA主机的1016端口点击左侧的“主机”菜单,进入主机列表页面,
点击添加主机并复制脚本,在Agent主机安装Agent程序
然后就可以查看和管理docker容器了具体查看
相关文章推荐
- 使用Docker构建持续集成与自动部署的Docker集群
- 使用Docker构建持续集成与自动部署的Docker集群
- 使用Docker构建持续集成与自动部署的Docker集群
- 使用Docker构建持续集成与自动部署的Docker集群
- 使用maven集成docker构建和部署Spring Boot 应用
- 如何使用Xcode Server进行持续集成并自动部署到iTunes Connect
- 如何使用Xcode Server进行持续集成并自动部署到iTunes Connect
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
- Jenkins-Docker-SpringBoot-java-git-gradle-持续集成与自动部署-实现跨服务器部署
- gitlab持续集成部署(CI/CD),使用docker配置gitlab-runner
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
- 使用 svn+maven+jenkins(hudson)+Publish Over SSH plugins 构建持续集成及自动远程发布体系(转)
- 持续集成工具集之四 Jenkins+Maven+Git+Tomcat 项目构建和自动部署
- jenkins + maven + svn + tomcat 搭建自动构建,自动部署,持续集成环境
- 使用Jenkins搭建持续集成(CI)环境(实现自动构建)(转载)
- 持续集成:docker下使用jenkins容器构建docker镜像
- 使用jenkins、docker、consul、nginx搭建支持自动化构建部署以及弹性伸缩的集群系统详细教程
- 使用DaoCloud持续构建docker镜像,自动化部署
- 持续集成--使用dockerfile构建docker镜像
- 持续集成工具集之四 Jenkins+Maven+Git+Tomcat 项目构建和自动部署