框架 | SpringBoot项目发布到自动化容器Docker步骤

如何发布Sping Boot项目?

新建好SpringBoot项目之后,SIT测试如果没问题,则下一步肯定要进行UAT测试。

那么如何将SpringBoot项目进行发布部署,这和我们之前的普通web项目不太一样,之前的项目直接部署到tomcat的webapps中,然后启动tomcat即可访问。

但是SpringBoot项目内嵌tomcat,这如何发布部署访问呢?

目前比较常用的方式有三种:发布JAR包、发布WAR包、部署到自动化容器中,以下具体讲解发布部署过程。

1

技术选型

JDK1.7、MYSQL57、Spring Boot、Logback、Mybatis、mybatis映射xml、jsp、关闭默认模板引擎、DB连接池、Docker

2

开发工具

Myeclipse、Maven、Linux、Tomcat7

方式一:JAR包--推荐

点击这里《框架 | SpringBoot项目创建和发布部署步骤》

方式二:WAR包--看着办

点击这里《框架 | SpringBoot项目发布部署外部tomcat服务器步骤》

方式三:自动化容器--强烈推荐

Docker概述:

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。更重要的是容器性能开销极低。Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序。

Docker应用场景:

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

SpringBoot项目部署Docker过程:

Docker安装(Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上),采用yum安装方式:

①:通过 uname -r 命令查看你当前的内核版本

②:执行docker安装命令

③:启动docker后台服务

④:测试运行hello word

创建SB项目:

①:修改pom.xml,增加docker的插件

将SB项目部署到docker中:

①:首先保证在本地是可以访问没问题

②:创建一个source folder--src/main/docker

③:创建文件Dockerfile

④:导出jar包

⑤:在centos的/opt下新建docker文件夹

⑥:将jar包和Dockerfile 文件上传到docker文件夹目录下

⑦:在docker文件夹下执行命令:docker build -t docker .

-t代表要构建的镜像的tag,.代表当前目录,也就是Dockerfile所在的目录。

⑧:查看docker镜像进程docker images

⑨:启动镜像

⑩:本地浏览器访问

核心配置和操作过程如下:

核心代码:

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.xdl</groupId>
 <artifactId>SpringBootDemo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.9.RELEASE</version>
 <relativePath />
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 <docker.image.prefix>springboot</docker.image.prefix>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <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>
            </plugin>
 <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
 </plugins>
 </build>
</project>
MainServerController.java
@Controller
@SpringBootApplication
public class MainServerController {
 @ResponseBody
 @RequestMapping(value = "/")
 String home() {
 return "Hello Docker World";
 }
 public static void main(String[] args) {
 SpringApplication.run(MainServerController.class, "--server.port=8081");
 }
}
Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD SpringBootDemo-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

部署过程详解:

Docker安装,采用yum安装方式:

①:通过 uname -r 命令查看你当前的内核版本

②:执行docker安装命令

③:启动docker后台服务

④:测试运行hello word

创建SB项目:

①:修改pom.xml,增加docker的插件

将SB项目部署到docker中:

①:首先保证在本地是可以访问没问题

②:创建一个source folder--src/main/docker

③:创建文件Dockerfile

④:导出jar包

项目-->右键-->maven install

⑤:在centos的/opt下新建docker文件夹

⑥:将jar包和Dockerfile 文件上传到docker文件夹目录下

⑦:在docker文件夹下执行命令:docker build -t docker . (注意有个点)

-t代表要构建的镜像的tag,.代表当前目录,也就是Dockerfile所在的目录。

执行过程中,报错如下:

原因:出现这个问题原因为国内网络问题,无法连接到 docker hub。 好在国内已经有 daocloud,docker指定该源即可

解决:执行命令docker pull registry

解决完毕之后,继续执行docker build -t docker . 命令(注意有个点)

⑧:查看docker镜像进程:docker images

⑨:启动镜像 docker run -d -p 8081:8081 docker

⑩:本地浏览器访问

访问之前需要开启端口访问:

/sbin/iptables -I INPUT -p tcp --dport 8081 -j ACCEPT

原文发布于微信公众号 - 码神联盟(lkchatspace)

原文发表时间:2018-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户画像

中断向量 中断向量表

1、中断标识码(中断类型号):由硬件(通常是中断控制器)产生,以标识不同的中断源。

12530
来自专栏偏前端工程师的驿站

CentOS6.5菜鸟之旅:U盘安装CentOS64位

一、前言                                      之前下载了个CentOS7 32位版,一下就安装成功了,但由于其目录结构等与...

35050
来自专栏小狼的世界

Kubernetes中Pod的健康检查

我们先来看一下Kubernetes的架构图,每个Node节点上都有 kubelet ,Container Probe 也就是容器的健康检查是由 kubelet ...

37010
来自专栏杂烩

Rancher运行dubbo服务 原

        5、dubbo是dubbo-spring-boot-starter:1.0.0

16720
来自专栏云原生架构实践

Docker Data Center系列(一)- 快速搭建云原生架构的实践环境

DDC是Docker Data Center的简称,是Docker公司推出的容器化数据中心管理平台。它的编排核心是swarm,包含2个主要组件UCP和DTR。

21760
来自专栏容器云生态

overlayfs存储驱动的使用以及技术探究

overlayfs存储驱动的使用以及技术探究 1.overlayfs 基本概念 一种联合文件系统,设计简单,速度更快。overlayfs在linux主机上只有两...

423100
来自专栏技术翻译

十大Docker记录问题

Docker不仅改变了应用程序的部署方式,还改变了日志管理的工作流程。容器将日志写入控制台(stdout / stderr),而Docker Logging D...

35340
来自专栏晓晨的专栏

使用Docker安装Jenkins

35310
来自专栏程序小工

【Docker】--安装与配置

docker 是 linux 虚拟化技术,能够一键式搭建开发环境,并且能保证运维、开发、上线部署的环境完全一致,避免了运行环境差异性带来的问题。 具有简单、轻...

14730
来自专栏BestSDK

基于Docker的PHP开发环境

【编者的话】本文作者是Geoffrey,他是一个PHP的Web开发者,喜欢DevOps和Docker。本文主要介绍了如何使用Docker构建PHP的开发环境,文...

34690

扫码关注云+社区

领取腾讯云代金券