【Docker】5.Docker构建微服务镜像及持续集成

写了一个demo主要实现如下流程:
1.开发人员将代码提交至github。
2.通过jenkins触发构建,通过maven的docker插件构建微服务的docker镜像。
3.将镜像push到harbor私库,并实现镜像分发部署。
【Docker】5.Docker构建微服务镜像及持续集成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 ui
【Docker】5.Docker构建微服务镜像及持续集成jenkins密码可以进入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私库。

  1. jenkins中新建任务“pipeline”。
  2. 配置pipeline任务相关截图如下:
    【Docker】5.Docker构建微服务镜像及持续集成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进行构建相关截图如下:
【Docker】5.Docker构建微服务镜像及持续集成5) 构建成功后登陆harbor就可以看到我们push的镜像。
【Docker】5.Docker构建微服务镜像及持续集成6) 运行我们的镜像

sudo docker run -p 8181:8181 -d 10.168.xx.xx:8101/yrz/microservice-wxt-frontweb:1.0