1. 镜像高级操作-创建镜像
2.1 为什么需要
1)备份-容器备份
有时我们需要把正在运行的容器备份下来。
2)打包镜像
开发人员把开发代码要打成镜像,测试和部署人员之间pull镜像即可部署. 只依赖于docker.
极大统一开发与测试或线上环境的差异
2.2创建方式
1)基于容器构建-容器备份
2)dockerfile构建-脚本构建,mave可以用来构建jar
3)maven插件构建-也是转换为dockerfile
2.3基于容器构建-fastdfs就是这样做出来
2.3.1 执行构建
docker commit mycentos(容器) yhptestcentos(镜像名)
2.3.2 使用新镜像启动新容器
使用新镜像创建新容器
docker run di --name=新容器名称 新镜像名称
启动容器
docker exec -it 新镜像名称 /bin/bash
2.4 Dockerfile构建
2.4.1什么是Dockerfile
通过dockerfile我们可以基于一个基础镜像,创建一个新的镜像.
Eureka
Centos:可以使用它作为初始镜像
Jdk
Jar
Java -jar xxx.jar
开发人员可以提供一个dockerfile脚本,如果测试人员和部署人员实在不想用我们
镜像,它是可以通过我们提供dockerfile脚本来制作镜像.
2.4.2 基本命令
2.4.3 实战-docker1.8镜像制造
构建jdk1.8的镜像 -> 需要centos的镜像 FROM centos:7
FROM centos:7
MAINTAINER yhptest
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
docker build -t="jdk1.8" .
2.5 私有仓库搭建
2.5.1 私有仓库搭建与配置
多个团队通过私有镜像仓库共享镜像.正常来说这个仓库是应该外网能够访问.
私有镜像仓库也可以通过docker运行
1)下载私有仓库镜像(代码)
docker pull registry
2)启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
docker logs itsource-registry --tail 10 -f
3)测试
4)让Docker信任私有仓库地址
修改vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://5pfmrxk8.mirror.aliyuncs.com","http://hub-mirror.c.163.com"],
"insecure-registries":["192.168.0.109:5000"]
}
5)重启docker
systemctl restart docker
docker start itsource-registry
docker info
2.5.2 上传镜像或拉取镜像到私有仓库
1)上传
①标记此镜像为私有仓库镜像
docker tag jdk1.8 172.16.33.216:5000/jdk1.8
②上传镜像
docker push 172.16.33.216:5000/jdk1.8
先要确保registry容器已经启动
测试:http://ip:5000/v2/_catalog
2)拉取
其他docker下载镜像:同样设置需要设置仓库信任
①也可删除本地镜像后重新pull:
注意如果同一个id有多个镜像可以使用名称删除
docker rmi 172.16.33.216:5000/jdk1.8
②pull
③新镜像创建容器测试
docker run -di --name=jdk1.8 172.16.33.216:5000/jdk1.8
2.6 maven插件构建
对于数量众多的微服务,手动部署(dockerfile)无疑是非常麻烦的做法,并且容易出错。所以我们这 里学习如何自动部署,这也是企业实际开发中经常使用的方法。
Maven插件自动部署步骤:
(1)修改宿主机的docker配置,让其可以远程访问
vi /lib/systemd/system/docker.service
其中ExecStart=后添加配置 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
修改后如下(2)刷新配置,重启服务
systemctl daemon-reload
systemctl restart docker
docker start registry
172.16.4.194:2375
防火墙对该端口放行
firewall-cmd --permanent --zone=public --add-port=2375/tcp
systemctl stop firewalld 只有加端口映射的时候必须开启
(1)在工程pom.xml
<build>
<finalName>eureka</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--这里写上main方法所在类的路径-->
<configuration>
<mainClass>cn.itsource.hrm.EurekaServer7001Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>172.16.4.194:5000/${project.artifactId}:${project.version}</imageName>
<baseImage>jdk1.8</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}
</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<dockerHost>http://172.16.4.194:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
以上配置会自动生成Dockerfile
FROM jdk1.8
ADD app.jar /
ENTRYPOINT [“java”,"‐jar","/app.jar"]
(5)在windows的命令提示符下,进入工程hrm_eureka_7001所在的目录
进入Eureka 所在的目录,输入以下命令,进行打包和上传镜像
mvn clean package docker:build ‐DpushImage
(6)进入宿主机 , 查看镜像
输出如上内容,表示微服务已经做成镜像
浏览器访问 http://192.168.184.141:5000/v2/_catalog ,输出
{“repositories”:[“hrm_eureka”]}
(7) 启动容器:
docker run ‐di ‐‐name=eureka ‐p 1010:1010
172.16.15.173:5000/hrm_eureka:1.0‐SNAPSHO
步骤:
-
docker远程操作支持
-
配置maven插件
-
打包并push
-
运行
3.持续集成工具-Jenkins
3.1持续集成介绍
3.1.1 为什么需要持续集成
scrum(敏捷项目管理)提倡,可用的软件优于面面俱到的文档。但如何保证可用软件的质量成了一个棘手的问题,尤其是在不断变化的需求中。
怎么办才能看出软件质量的优劣,进度的快慢? 经常集成起来,看看效果,不就知道质量怎么样,进度怎么样了嘛?而且经常集成起来看,有助于发现问题,解决问题,如需求有没有偏差,是不是领导和客户想要的效果,又或者发现和解决这样那样的bug等等。
但经常集成,又会牵扯开发人员很多精力去更好地协同工作,这是在开发过程中不可回避的问题。
期望达到两种效果:
经常打包集成,以便领导抽查,跟踪质量和进度。
每个需求都应该有可用的软件,及时发现bug解决bug。
方案:每几天安排一次手工集成。
(1)组员提交代码到svn
(2)从svn检出代码
(3)使用maven编译打包
(4)代码质量检测工具检测代码质量
(5)将代码质量统计并反馈
(6)将打包的项目war包放到tomcat中,
(7)执行自动化测试用例看功能有没有问题
3.1.2 什么是持续集成
持续集成正是针对上述一系列问题的一种软件开发实践,
它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
使用持续集成等工具,经常性自动化集成,尽早发现错误并解决,得到可用软件。
3.1.3 持续集成的作用
1、降低风险,每天都可能发生多次集成,有利于及早发现软件质量问题。
2、自动完成,通过自动化工具可以避免开发人员投入过多精力
3、软件运行状态随时可看,可以增加领导和团队成员对项目的信心。
4、利于对未来进行把控,持续集成的信息有利于我们对未来进行更好地规划和把控。
3.1.4持续集成的组成
***3.1.4.1****所需内容*
持续集成管理平台不只是CI服务器,是一系列软件开发管理工具的组合。
源码版本管理:Subversion、Git
项目构建工具:Maven、Ant、Gradle
代码质量管理:Sonar(Checkstyle、PMD、FindBugs……)
持续集成引擎:Hudson、Jenkins、Apache Continuum
应用持续部署:操作系统、JDK、Tomcat、JBoss…
实施持续集成过程中要用到的其他各种工具、各种插件
*3.1.4.2*架构图*-核心ci服务器(Jenkins)*
开发人员:
提交或更新代码到源码版本管理,持续集成后能立马发现bug,解决bug。
项目管理人员:
触发持续集成,下载代码,编译,打包,质量检测,自动化测试。发现问题,分配给开发人员进行修改。
测试:
持续集成后软件包,可以获取来做测试。
3.2 Jenkins简介
Jenkins,原名Hudson,2011年改为现在的名字,它 是一个开源的实现持续集成的软件工具。官方网站:http://jenkins-ci.org/。
Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图 表的形式形象地展示项目构建的趋势和稳定性。
Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
特点:
易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额 外的安装,更无需安装数据库;
易配置:提供友好的GUI配置界面;
变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并 输出到编译输出信息中;
支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是 永久链接地址,因此,你可以在各种文档中直接使用该链接;
集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据 我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程 中,干别的事情); JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使 用了哪个版本的jars文件等构建记录;
支持第三方插件:使得 Jenkins 变得越来越强大
Jenkins就是持续集成中使用的多种工具(代码管理工具,构建工具,质量管理工具,进行管理工具)
中持续集成工具.
3.3 jenkins安装
在本地vmware虚拟机进行安装是ok,但是下载插件的速度比较慢.影响操作,我自己云上操作.它们都是一样都是Linux
3.3.1 jdk安装
(1)将jdk-8u171-linux-x64.rpm上传至服务器(虚拟机)
(2)执行安装命令
rpm -ivh jdk-8u171-linux-x64.rpm RPM方式安装JDK,
其根目录为:/usr/java/jdk1.8.0_171-amd64
默认已经安装:
3.3.2 Jenkins安装与启动
(1)下载jenkins
wget https://pkg.jenkins.io/redhat/jenkins-2.83-1.1.noarch.rpm
或将jenkins-2.83-1.1.noarch.rpm上传至服务器
(2)安装jenkins
rpm -ivh jenkins-2.83-1.1.noarch.rpm
(3)配置jenkins
vi /etc/sysconfig/jenkins
修改用户和端口
JENKINS_USER=“root”
JENKINS_PORT=“8888”
(4)启动服务
systemctl start jenkins
cat /var/log/jenkins/jenkins.log
如果链接超时,修改:vi /var/lib/jenkins/hudson.model.UpdateCenter.xml 把https修改为http
修改插件镜像
http://mirror.xmission.com/jenkins/updates/update-center.json
Java找不到解决方案
https://blog.csdn.net/lucy06/article/details/78893876
(5)访问链接 http://192.168.184.135:8888
关闭防火墙
firewall-cmd --permanent --zone=public --add-port=8888/tcp
systemctl restart firewalld
从/var/lib/jenkins/secrets/initialAdminPassword中获取初始密码串
cat /var/lib/jenkins/secrets/initialAdminPassword后输入
下载时间可能比较久