经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
Docker+Jenkins+Git发布SpringBoot应用
来源:cnblogs  作者:冬眠的山谷  时间:2019/6/3 8:51:04  对本文有异议

 

Doccker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

docker安装

ubuntu下的安装。使用snap应该是最简单的方法。

  1. #安装docker
    sudo snap install docker
    #移除docker
  2. sudo snap remove docker

 

查看snap的安装列表

可以看到本次安装的docker版本是18.06.1-ce

  1. lgj@lgj-Lenovo-G470:~$ snap list docker
  2. Name Version Rev Tracking Publisher Notes
  3. docker 18.06.1-ce 384 stable canonical* -

 

测试docker是否安装成功

  1. lgj@lgj-Lenovo-G470:~$ docker version
  2. Client:
  3. Version: 18.06.1-ce
  4. API version: 1.38
  5. Go version: go1.10.4
  6. Git commit: e68fc7a
  7. Built: Tue May 7 17:57:34 2019
  8. OS/Arch: linux/amd64
  9. Experimental: false
  10. Server:
  11. Engine:
  12. Version: 18.06.1-ce
  13. API version: 1.38 (minimum version 1.12)
  14. Go version: go1.10.4
  15. Git commit: e68fc7a
  16. Built: Tue May 7 17:57:34 2019
  17. OS/Arch: linux/amd64
  18. Experimental: false

 

docker常用命令

  1. #查看docker支持的所有命令 
    docker

    #查看docker命令的使用方式
    docker images --help
    docker ps --help

    #查看安装的镜像
    docker images [OPTIONS] [REPOSITORY[:TAG]]

    #查看运行的容器
    docker ps

    #查看所有的容器
    docker ps -a

    #删除镜像
    docker rmi -f [REPOSITORY[:TAG]]

    #删除容器
    docker rm [OPTIONS] CONTAINER [CONTAINER...]

 

更多命令参考官方命令文档

dockerfile使用

 

docker的更多使用方法参考

<Docker开发实践><Docker开发指南><没什么难的Docker入门与开发实战><第一本DOCKER书>

 

 

Jenkins

Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。Jenkins可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Environment的任何机器独立运行。

 

安装

下载地址

选择下载war包

下载之后直接运行即可,指定端口为8097,访问地址为http://localhost:8097

  1. java -jar jenkins.war --httpPort=8097

 

运行后会在用户目录下生成.jenkins工作目录。

 

首次登录需要用户名和密码

用户名为:admin

密码查看 .jenkins/secrets/initialAdminPassword 文件中。

  1. lgj@lgj-Lenovo-G470:~$ cat .jenkins/secrets/initialAdminPassword
  2. 7d3bc703deb449debce0a25dfd3a00ad

 

配置

 

安装git插件

系统管理-插件管理

配置jdk和maven

系统管理-全局工具配置

可以选择本地或者自动安装

 

 

 

 

 

jemkins更多使用方式参考官方文档 <jenkins权威指南>

 

创建一个SpringBoot应用

只有一个controller类

  1. @RestController
  2. @RequestMapping("/web")
  3. public class WebController {
  4. @RequestMapping("/demo")
  5. public String demo(){
  6. return new Random().nextInt(100)+"";
  7. }
  8. }

 

访问端口为:8452

  1. server:
  2. port: 8452

 

上传到git,仓库地址为https://github.com/lgjlife/web-demo

 

构建jenkins项目

首页-新建任务-构建一个maven项目(项目名称为:web-demo-docker)

创建成功后首页可以看到项目列表

项目配置

点击项目名称---配置---进入配置页面

1.配置git仓库

jenkins构建时会自动从git仓库拉取项目文件。

git@github.com:lgjlife/web-demo.git

注意url的写法,写错会自动报错。由于是从公共仓库拉取,所以没有进行认证配置。

本次获取的是master分支。

 

2.配置触发器

触发器就是定义何种条件下jenkins开始构建项目

这里选择轮询,*/1 * * * * 说明每隔一分钟就进行一次构建,这里只有在git仓库更新之后才起作用。也就是每分钟会去检测git仓库源码是否更新,不更新则不进行构建。

更多表达式的说明点击后面的?图标查看。

3.构建操作

这里选择运行两个shell脚本,脚本后面进行说明

jenkins项目配置完成。

 

编写Dockerfile文件

注意dockerfile位于主工程目录下。

POM文件配置

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <!-- 指定该Main Class为全局的唯一入口 -->
  8. <mainClass>com.demo.web.WebApplication</mainClass>
  9. <layout>ZIP</layout>
  10. </configuration>
  11. <executions>
  12. <execution>
  13. <goals>
  14. <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
  15. </goals>
  16. </execution>
  17. </executions>
  18. </plugin>

  19.        <!-- docker 插件配置-->
  20. <plugin>
  21. <groupId>com.spotify</groupId>
  22. <artifactId>dockerfile-maven-plugin</artifactId>
  23. <version>1.4.10</version>
  24. <configuration>
  25. <repository>lgj/webdemo</repository>
  26. <tag>1.0</tag>
  27. <buildArgs>
  28. <JAR_FILE>/target/web-1.0.jar</JAR_FILE>
  29. </buildArgs>
  30. </configuration>
  31. </plugin>
  32.  
  33. </plugins>
  34. </build>

 

说明:

 dockerfile-maven-plugin ,maven 的docker插件

  1. <repository>lgj/webdemo</repository>:镜像名称
  1. <tag>1.0</tag>:镜像标签

    一个镜像的完整标识是:镜像仓库/镜像名称:镜像标签
  1. <JAR_FILE>/target/web-1.0.jar</JAR_FILE>:构建时的传入dockerfile的参数  

dockerfile

  1. #基于jdk8镜像进行构建,创建的镜像已经配置好java环境
    FROM openjdk:8

  2. #上述的pom中配置的JAR_FILE将会传入到该参数
    #也可以在这里直接配置 ARG JAR_FILE=/target/web-1.0.jar
    #用于配置spingboot应用maven打包生成的jar文件
  3. ARG JAR_FILE

  4. #在镜像中创建一个工作目录
  5. run mkdir /worker

  6. #将jar文件复制到工作目录中
  7. add ${JAR_FILE} /worker

  8. #暴露镜像的端口8452,其他端口不开放
  9. expose 8452

  10. #镜像启动时执行的命令,配置多条仅执行最后一条
    #这里配置启动jar文件: java -jar /worker/web-1.0.jar
  11. entrypoint ["java","-jar","/worker/web-1.0.jar"]




 

构建脚本build.sh

用于根据dockerfile创建docker脚本

  1. mvn clean
  2. mvn package -DskipTests
  3. docker rmi -f lgj/webdemo:1.0
  4. mvn dockerfile:build
  5. docker images

 

先使用mvn进行打包

再删除旧的镜像,由于不能覆盖创建,因此需要删除再创建。

由于已经pom中已经配置docker插件,可以直接调用:mvn dockerfile:build 进行构建。

运行脚本run.sh

用于创建并运行docker容器

  1. docker ps -a
  2. docker stop webdemo-8452
  3. docker rm -f webdemo-8452
  4. docker run -d --name webdemo-8452 -p 8452:8452 lgj/webdemo:1.0
  5. docker ps -a

 

和创建镜像类似,运行之前必须先删除容器。

docker run 说明:

-d:以后台进程的方式运行。

--name :指定容器的名称为 webdemo-8452 

-p : 指定主机和容器的端口映射。docker是基于主机运行的,数据--》主机端口--》容器端口。因此需要配置端口映射。一般配置成一样的。这里只需要访问springboot应用的8452,所以配置成8452.

lgj/webdemo:1.0: 镜像名称

 

所有文件编写完成后,重新pull到git仓库。

 

jenkins构建

点击项目页面的立即构建

可以看到下方的构建历史。

点击进去查看每次构建的具体情况。

 点击控制台输出,可以查看构建过程的输出

 

构建过程:

1.拉取远端的git仓库文件到jenkins的工作目录/home/lgj/.jenkins/workspace/web-demo-docker

 2. 执行配置的相关命令和操作。

输出 Finished: SUCCESS 则表示构建成功。

  1. ??? admin ??
  2. ??? ????? /home/lgj/.jenkins/workspace/web-demo-docker ?
  3. No credentials specified
  4. > git rev-parse --is-inside-work-tree # timeout=10
  5. Fetching changes from the remote Git repository
  6. > git config remote.origin.url git@github.com:lgjlife/web-demo.git # timeout=10
  7. Fetching upstream changes from git@github.com:lgjlife/web-demo.git
  8. > git --version # timeout=10
  9. > git fetch --tags --force --progress git@github.com:lgjlife/web-demo.git +refs/heads/*:refs/remotes/origin/*
  10. > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
  11. > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
  12. Checking out Revision 074769c6e558772ddcaf133e92641995cbf3c7ef (refs/remotes/origin/master)
  13. > git config core.sparsecheckout # timeout=10
  14. > git checkout -f 074769c6e558772ddcaf133e92641995cbf3c7ef
  15. Commit message: "docker images"
  16. > git rev-list --no-walk 074769c6e558772ddcaf133e92641995cbf3c7ef # timeout=10
  17. [web-demo-docker] $ /bin/sh -xe /tmp/jenkins5091262134747837972.sh
  18. + echo =======================================================================================
  19. =======================================================================================
  20. + pwd
  21. /home/lgj/.jenkins/workspace/web-demo-docker
  22. + ./build.sh
  23. [INFO] Scanning for projects...
  24. [INFO]
  25. [INFO] ------------------------------------------------------------------------
  26. [INFO] Building web 1.0
  27. [INFO] ------------------------------------------------------------------------
  28. [INFO]
  29. [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ web ---
  30. [INFO] Deleting /home/lgj/.jenkins/workspace/web-demo-docker/target
  31. [INFO] ------------------------------------------------------------------------
  32. [INFO] BUILD SUCCESS
  33. [INFO] ------------------------------------------------------------------------
  34. [INFO] Total time: 2.595 s
  35. [INFO] Finished at: 2019-06-02T13:07:18+08:00
  36. [INFO] Final Memory: 12M/188M
  37. [INFO] ------------------------------------------------------------------------
  38. [INFO] Scanning for projects...
  39. [INFO]
  40. [INFO] ------------------------------------------------------------------------
  41. [INFO] Building web 1.0
  42. [INFO] ------------------------------------------------------------------------
  43. [INFO]
  44. [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ web ---
  45. [INFO] Using 'UTF-8' encoding to copy filtered resources.
  46. [INFO] Copying 1 resource
  47. [INFO] Copying 1 resource
  48. [INFO]
  49. [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ web ---
  50. [INFO] Changes detected - recompiling the module!
  51. [INFO] Compiling 2 source files to /home/lgj/.jenkins/workspace/web-demo-docker/target/classes
  52. [INFO]
  53. [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ web ---
  54. [INFO] Using 'UTF-8' encoding to copy filtered resources.
  55. [INFO] skip non existing resourceDirectory /home/lgj/.jenkins/workspace/web-demo-docker/src/test/resources
  56. [INFO]
  57. [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ web ---
  58. [INFO] No sources to compile
  59. [INFO]
  60. [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ web ---
  61. [INFO] Tests are skipped.
  62. [INFO]
  63. [INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ web ---
  64. [INFO] Building jar: /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0.jar
  65. [INFO]
  66. [INFO] --- spring-boot-maven-plugin:2.1.0.RELEASE:repackage (repackage) @ web ---
  67. [INFO] Layout: ZIP
  68. [INFO] Replacing main artifact /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0.jar
  69. [INFO]
  70. [INFO] --- spring-boot-maven-plugin:2.1.0.RELEASE:repackage (default) @ web ---
  71. [INFO] Layout: ZIP
  72. [INFO] Replacing main artifact /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0.jar
  73. [INFO] ------------------------------------------------------------------------
  74. [INFO] BUILD SUCCESS
  75. [INFO] ------------------------------------------------------------------------
  76. [INFO] Total time: 9.671 s
  77. [INFO] Finished at: 2019-06-02T13:07:30+08:00
  78. [INFO] Final Memory: 32M/330M
  79. [INFO] ------------------------------------------------------------------------
  80. Untagged: lgj/webdemo:1.0
  81. [INFO] Scanning for projects...
  82. [INFO]
  83. [INFO] ------------------------------------------------------------------------
  84. [INFO] Building web 1.0
  85. [INFO] ------------------------------------------------------------------------
  86. [INFO]
  87. [INFO] --- dockerfile-maven-plugin:1.4.10:build (default-cli) @ web ---
  88. [INFO] dockerfile: null
  89. [INFO] contextDirectory: /home/lgj/.jenkins/workspace/web-demo-docker
  90. [INFO] Building Docker context /home/lgj/.jenkins/workspace/web-demo-docker
  91. [INFO] Path(dockerfile): null
  92. [INFO] Path(contextDirectory): /home/lgj/.jenkins/workspace/web-demo-docker
  93. [INFO]
  94. [INFO] Image will be built as lgj/webdemo:1.0
  95. [INFO]
  96. [INFO] Step 1/6 : FROM openjdk:8
  97. [INFO]
  98. [INFO] Pulling from library/openjdk
  99. [INFO] Digest: sha256:0e25c8428a56e32861fe996b528a107933155c98fb2a9998a4a4e9423aad734d
  100. [INFO] Status: Image is up to date for openjdk:8
  101. [INFO] ---> 4a0a42e87cf3
  102. [INFO] Step 2/6 : ARG JAR_FILE
  103. [INFO]
  104. [INFO] ---> Using cache
  105. [INFO] ---> dc2f959e4d9c
  106. [INFO] Step 3/6 : run mkdir /worker
  107. [INFO]
  108. [INFO] ---> Using cache
  109. [INFO] ---> 87e001b16580
  110. [INFO] Step 4/6 : add ${JAR_FILE} /worker
  111. [INFO]
  112. [INFO] ---> 7d6b791017fd
  113. [INFO] Step 5/6 : expose 8452
  114. [INFO]
  115. [INFO] ---> Running in f7989737ef59
  116. [INFO] Removing intermediate container f7989737ef59
  117. [INFO] ---> aa553eea45de
  118. [INFO] Step 6/6 : entrypoint ["java","-jar","/worker/web-1.0.jar"]
  119. [INFO]
  120. [INFO] ---> Running in 7133f5214111
  121. [INFO] Removing intermediate container 7133f5214111
  122. [INFO] ---> 10e0d3d344d6
  123. [INFO] Successfully built 10e0d3d344d6
  124. [INFO] Successfully tagged lgj/webdemo:1.0
  125. [INFO]
  126. [INFO] Detected build of image with id 10e0d3d344d6
  127. [INFO] Building jar: /home/lgj/.jenkins/workspace/web-demo-docker/target/web-1.0-docker-info.jar
  128. [INFO] Successfully built lgj/webdemo:1.0
  129. [INFO] ------------------------------------------------------------------------
  130. [INFO] BUILD SUCCESS
  131. [INFO] ------------------------------------------------------------------------
  132. [INFO] Total time: 57.257 s
  133. [INFO] Finished at: 2019-06-02T13:08:31+08:00
  134. [INFO] Final Memory: 25M/362M
  135. [INFO] ------------------------------------------------------------------------
  136. REPOSITORY TAG IMAGE ID CREATED SIZE
  137. lgj/webdemo 1.0 10e0d3d344d6 2 seconds ago 504MB
  138. <none> <none> 67b2eee0f0b6 2 hours ago 504MB
  139. <none> <none> 88b1d5b63784 2 hours ago 504MB
  140. <none> <none> e60203504301 2 hours ago 504MB
  141. <none> <none> 11f593fd9537 2 hours ago 504MB
  142. openjdk 8 4a0a42e87cf3 3 days ago 488MB
  143. + ./run.sh
  144. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  145. d1a4fdf8f230 67b2eee0f0b6 "java -jar /worker/w???" 2 hours ago Up 2 hours 0.0.0.0:8452->8452/tcp webdemo-8452
  146. webdemo-8452
  147. 7fe8d8d9cdff88f8281e8b0f6c8ff5e010844dd40b82829f5952d589c6d183b2
  148. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  149. 7fe8d8d9cdff lgj/webdemo:1.0 "java -jar /worker/w???" 2 seconds ago Up Less than a second 0.0.0.0:8452->8452/tcp webdemo-8452
  150. Finished: SUCCESS

 

完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 













原文链接:http://www.cnblogs.com/lgjlife/p/10962445.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号