【Docker】5.Docker构建微服务镜像及持续集成
写了一个demo主要实现如下流程:
1.开发人员将代码提交至github。
2.通过jenkins触发构建,通过maven的docker插件构建微服务的docker镜像。
3.将镜像push到harbor私库,并实现镜像分发部署。1. 安装Jenkins
通过docker镜像中心下载docker镜像,本文选择的镜像jenkins镜像版本为2.130。
1) 下载docker镜像
$ sudo docker pull jenkins/jenkins:2.130
2)修改目录权
解决jenkins用户的进程访问挂载目录时,会出现 Permission denied 的问题
$ sudo chown -R 1000 /usr/local/nlp/jenkins
3) 运行docker镜像
$ sudo docker run -d -u root --name myjenkins -p 8180:8080 -p 50000:50000 \
-p 8080:8080 \
-v /usr/local/nlp/jenkins:/var/jenkins_home \
-v /usr/local/nlp/apache-maven-3.6.0:/var/maven_home \
-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker \
-v /etc/sysconfig/docker:/etc/sysconfig/docker \
-d docker.io/jenkins/jenkins:2.130
-p 8180:8080 中,8080为jenkins容器监听的端口,8180为主机端口
-v /usr/local/nlp/jenkins:/var/jenkins_home 本地目录mount挂载到容器中 <宿主目录>:<容器目录>
-v /var/run/docker.sock:/var/run/docker.sock 与 -v /usr/bin/docker:/usr/bin/docker是把宿主机docker 映射到容器内。
由于jenkins容器中的docker运行出现异常:
/usr/bin/docker: 2: .: Can't open /etc/sysconfig/docker
查询相关资料可能是由于yum安装dokcer原因或docker版本问题,后续演示就将jenkins通过非docker方式安装。
访问http://10.168.xx.xx:8180就可以看到我们的jenkins uijenkins密码可以进入jenkins容器查看
$ sudo docker exec -it cfa70d979ef4 bash
$ cat /var/jenkins_home/secrets/initialAdminPassword
2.新建微服务上传至Github
微服务项目主要代码如下,并将代码上传至github,gitbub路径为:https://github.com/wang37444/microservice-wxt.git
pom.xml
<build>
<finalName>microservice-wxt-frontweb</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${maven.docker.version}</version>
<configuration>
<!-- 镜像名称 -->
<imageName>${docker.image.prefix}/${project.artifactId}:0.0.1</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 用于指定需要复制的根目录,${project.build.directory}表示target目录 -->
<directory>${project.build.directory}</directory>
<!-- 打包后的jar包文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<archive>
<manifest>
<mainClass>com.wxt.microservice.frontweb.MicroserviceWxtFrontwebApplication</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<!-- 不添加则会出现no main manifest attribute in xxx.jar异常 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Dockerfile文件
FROM java:8
VOLUME /tmp
ADD /microservice-wxt-frontweb/target/microservice-wxt-frontweb.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8181
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3.Jenkins构建服务
通过jenkins将微服务打包生成docker镜像,并上传至harbor私库。
- jenkins中新建任务“pipeline”。
- 配置pipeline任务相关截图如下:
3) 微服务项目中新增Jenkinsfile文件
pipeline {
agent any
stages {
stage('拉取代码'){
steps {
git 'https://github.com/wang37444/microservice-wxt.git'
}
}
stage('maven编译'){
steps {
dir('./'){
sh 'mvn clean install'
}
}
}
stage('构建镜像'){
steps {
dir('./'){
sh 'sudo docker build -t 10.168.xx.xx:8101/yrz/microservice-wxt-frontweb:1.0 . -f /home/uaren/.jenkins/workspace/microservice-wxt/microservice-wxt-frontweb/src/main/docker/Dockerfile'
}
}
}
stage('镜像上传私库'){
steps {
dir('./'){
sh 'sudo docker push 10.168.xx.xx:8101/yrz/microservice-wxt-frontweb:1.0'
}
}
}
}
}
4) jenkins进行构建相关截图如下:5) 构建成功后登陆harbor就可以看到我们push的镜像。
6) 运行我们的镜像
sudo docker run -p 8181:8181 -d 10.168.xx.xx:8101/yrz/microservice-wxt-frontweb:1.0