spring-boot项目的docker集成化部署(一)
spring-boot项目的docker集成化部署
前言
据说流行的微服务和docker一起,更配哦!接下来,使用简单spring-boot项目演示docker的集成化部署的案例,在看过微笑的博客觉得不过瘾,自己动手,下面的方案与Devops的方式比较接近;希望搭建理解这种思路。
基本思路与方案

- 开发者
push到git服务器 - Jenkins通过
触发器收到通知 - Jenkins克隆工作区
- Jenkins创建一个Docker镜像(注意:这是用
maven的docker插件) - Jenkins将镜像推到Docker Hub
借鉴图片
基本步骤
准备源码
Github路径:spring-boot_docker_demo
说明:这里使用com.spotify的docker-maven-plugin的插件;用法参阅代码注释。
服务器和基础环境
Linux下Java8安装
1. 下载
wget --no-cookies \
--no-check-certificate \
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz \
-O jdk-8-linux-x64.tar.gz
2. 解压安装
tar -zxvf jdk-8-linux-x64.tar.gz
mv jdk-8-linux-x64.tar.gz /usr/local
3. 配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_181/
export PATH=$PATH:$JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_181/
export JRE_HOME=$JAVA_HOME/jre #tomcat需要
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
4. 刷新环境变量
source /etc/profile #刷新环境变量
2.1.3.2.3 Linux下Manven安装
maven的安装
1. 下载maven
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
2. 安装
tar -zxvf apache-maven-3.5.0-bin.tar.gz
mv apache-maven-3.5.4 /usr/local/maven/apache-maven-3.5.4
3. 配置环境变量
export MAVEN_HOME=/usr/local/maven/apache-maven-3.5.4
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH #注意这里添加$MAVEN_HOME/bin
4. 刷新环境变量
source /etc/profile #刷新环境变量
安装Jenkins
Jenkins安装有三种方式
1. 基于Docker的安装
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
2. 基于war包方式
在官网下载,放入Tomcat的目录中即可;打war,大家肯定十分熟悉的操作。
3. 使用yum方式直接安装 (推荐)
1.下载
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
2.安装
yum install jenkins
3. 配置
vi /etc/sysconfig/jenkins

可避免避免和
Tomcat端口重复的问题
4. 启动服务
service jenkins start
Jenkins的基本初始化
1. 登录

2. 安装Jenkins插件

3.安装成功
基本按照推荐来
4. 配置jdk和maven配置

说明这里其实
git非必须,之前的插件安装中安装了
Pipeline语法
语法请自行查阅资料,这里使用groovy的语法
Jenkins的项目配置
1. 新建pipeline的项目
2. 添加如下jekins的脚本内容:注意:使用pipeline的语言
#!groovy
pipeline{
agent any
environment {
REPOSITORY="https://gitee.com/will-we/spring-boot_docker_demo.git"
}
tools {
maven 'm3'
jdk 'java8'
}
stages {
stage('获取代码'){
steps {
echo "start fetch code from git:${REPOSITORY}"
//清空当前目录
deleteDir()
//拉去代码
git "${REPOSITORY}"
}
}
stage('代码静态检查'){
steps {
//伪代码检查
echo "start code check"
}
}
stage('编译+单元测试'){
steps {
echo "start compile"
//切换目录
sh 'mvn -Dmaven.test.skip=true -U clean install'
}
}
stage('构建镜像'){
steps {
echo "start build image"
//build镜像
sh 'mvn clean package docker:build'
}
}
}
}
3. 立即构建”,查看运行的日子如下:

4. 如果看上面的恭喜你,构建镜像成功;参看docker的镜像,对你“so easy”

5. 启动docker容器
# 最好添加--name参数
docker run --name= springboot/spring-boot_docker_demo -p 8081:8080 -t srping-demo


问题解决
1. Jenkins构建时出现:“mvn: command not found”

解决方案:
自己试着摸着石头过河,只能借助搜索引擎了;如下是解决的流程:
1) 安装Pipeline Maven Integration插件

2) 检查环境变量
上面安装了插件后依旧不好使,继续找原因吧,Maven not found in Jenkins【StackOverflow】有着这个题问题:原因如下:
The reason is that Jenkins is installed and run as a ‚system user‘ service. This means the process can‘t see the ENV variables and PATH of your user (user level). Setting up maven in PATH and ENV variables on system level makes the trick.
大体意思是:jekins的无法读取系统的环境变量;于是分别查看了大致的服务器和jekins的变量。
Jenkins 服务器/bin/bash

3) Jenkins导入java和maven的权限
还记得之前配置Jdk和maven的“全局工具设置”,注意:这里设置也是依旧不能直接读取,需要如下方式引入;“m3”是配置时名称,“java8”也是配置名称。
tools {
maven 'm3'
jdk 'java8'
}

2. Linux中端口占用问题
#方式一:参看端口8080信息
netstat -lnp | grep 8080
#方式二:参看端口8080信息
lsof -i :808
#杀死进程
kill -9 pid号
结语
1. 本文总结:
我们使用了一个简单的
spring-boot项目部署到远程服务器的操作流程,从而实现了推送代码到Git远程仓库,使用jekins的集成化构建docker实现,自动化部署方式。
2. 后期优化:
演示spring-boot的简单部署方式,其实该项目的还有很多地方优化,例如:
doker pushdocker的仓库、使用Jenkins的触发器git hook等;以及后期;spring-boot的多模块、以及docker compose的使用等。由于篇幅的原因可能放在了后面的文章。
参考资料
- SpringBoot+Docker+Git+Jenkins实现简易的持续集成和持续部署
- Spring Boot 2.0(四):使用 Docker 部署 Spring BootMaven 插件之 docker-maven-plugin 的使用
- 部署流水线搭建小记:Docker、Jenkins、Java和Couchbase
**================================================================================**
- 个人博客:will-we.com
- 我的掘金:weir
- 我的简书:weir
**================================================================================**
spring-boot项目的docker集成化部署(一)的更多相关文章
- Spring Boot项目的Logback配置文件使用yaml格式
1.普通的Spring项目使用logback默认用properties文件做为配置变量. 2.如果非要用yaml文件,那么可以转成Spring Boot项目,天生无缝结合 3.没办法,如果项目配置文件 ...
- 一行配置搞定 Spring Boot项目的 log4j2 核弹漏洞!
相信昨天,很多小伙伴都因为Log4j2的史诗级漏洞忙翻了吧? 看到群里还有小伙伴说公司里还特别建了800+人的群在处理... 好在很快就有了缓解措施和解决方案.同时,log4j2官方也是速度影响发布了 ...
- Spring Boot 项目的 API 接口防刷
首先是写一个注解类 拦截器中实现 注册到springboot中 在Controller中加入注解 说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考 一,技术要点:springbo ...
- spring boot项目的maven库查询地址
阿里巴巴地址 http://maven.aliyun.com/nexus/#welcome maven通用地址 http://mvnrepository.com/ gradle默认mavenCentr ...
- Spring Boot实战系列(7)集成Consul配置中心
本篇主要介绍了 Spring Boot 如何与 Consul 进行集成,Consul 只是服务注册的一种实现,还有其它的例如 Zookeeper.Etcd 等,服务注册发现在微服务架构中扮演这一个重要 ...
- spring boot本地开发与docker容器化部署的差异
spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...
- 微服务项目的docker自动化部署流程
目录 微服务的Docker自动化部署 制作JDK1.8的Docker镜像 Docker常用命令介绍 制作image的一般流程 将本地的image上传至私人仓库 使用Maven插件实现自动化docker ...
- 学习Spring Boot:(二十三)Spring Boot 中使用 Docker
前言 简单的学习下怎么在 Spring Boot 中使用 Docker 进行构建,发布一个镜像,现在我们通过远程的 docker api 构建镜像,运行容器,发布镜像等操作. 这里只介绍两种方式: 远 ...
- spring boot项目如何测试,如何部署
有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ...
随机推荐
- 学习 GitHub 有什么好处?
layout: post title: "学习 GitHub 有什么好处?" date: 2018-04-15 19:20:20 +0800 --- 鸣谢:王顶 老师(河北经贸大学 ...
- django基础知识之分页:
分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...
- PCB 板边倒圆角的实现方法(基本算法一)
PCB外形是直角时外形时,通常工程制作时,外是直角或尖角的地方倒圆角,主要是为了防止板边容易划伤板且容易扎伤人 所以当客户没有特殊要求时,PCB外形是直角时一般会默认倒角0.5mm圆角(如下图所示) ...
- WPF 入门笔记之基础
一.创建WPF程序 1. App.xaml 相当于窗体的配置文件 2. xmlns:xml名称空间的缩写 xmlns="http://schemas.microsoft.com/winfx/ ...
- MacOS使用GitBook制作电子书
目录 目录 一.简介 二.安装 1. 安装node.js 2. 安装gitbook 三.使用 四.常用命令 1. 初始化 或 编辑目录 2. 编辑内容之后编译书籍 3. 启动web服务通过浏览器预览数 ...
- Pascal到c++,求大佬翻译!
请大佬翻译完毕后私信我谢谢! var a,b,c,d,f:array[1..1000]of longint; i,j,k,n,m,o:longint; procedure zx(p,q:longint ...
- Excel催化剂开源第8波-VSTO开发之异步调用方法
在VSTO开发过程中,因其和普通的Winform开发有点差别,具体细节笔者也说不清楚,大概是VSTO的插件是寄生在Excel中,不属于独立的进程之类的,其异步方法调用时,未能如Winform那样直接用 ...
- Catalan公式
f(n)=f(1)*f(n-1)+f(2)*f(n-2)+f(3)*f(n-3)+......+f(n-1)*f(1) 例用:一个长度为n的无重复序列入栈的所有出栈方式
- 关于Object.defineProperty 的基础知识
Object.defineProperty 这个方法大家耳熟能详,可以对 对象的属性进行添加或修改的操作.即可以进行 数据劫持 .vue就是通过这个方法来劫持数据的. 平时我们创建对象的时候,一般通 ...
- 浅谈单点登陆(SSO)
背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便. 但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多 ...

