您的位置:首页 > 运维架构 > Docker

Spring boot项目部署到Docker环境

2018-12-31 23:47 1561 查看

Spring boot项目部署到Docker环境

环境列表

JDK 1.8
编译器 IDEA
docker环境操作系统 CentOS7.6
spring boot 版本 2.1.1.RELEASE
Docker 版本

创建spring boot应用

参考:在IDEA中创建spring Boot项目

在项目入口类添加一个测试接口,代码如下:

@SpringBootApplication
@RestController
public class DemoApplication {

@RequestMapping("/hello")
public String home() {
return "Hello Docker World";
}

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}

我创建了一个名为 demo的项目

Spring 项目添加Docker支持

pom.xml-properties
中添加 Docker 镜像名称前缀

<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RC2</spring-cloud.version>
<docker.image.prefix>viki</docker.image.prefix>
</properties>

pom.xml-plugins
中添加 docker 插件

<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>

Docker有一个简单的Dockerfile文件格式,用于指定图像的“layer”。那么让我们继续在Spring Boot项目中创建一个

Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

注: app.jar 可改为你具体的应用jar包名称

这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中。

  • FROM :指定需要使用哪个基础docker镜像(镜像含有JDK环境),需要先下载
  • VOLUME:因为这是Spring Boot应用程序默认为Tomcat创建工作目录的地方。效果是在主机“/ var / lib / docker”下创建一个临时文件,并将其链接到“/ tmp”下的容器
  • ARG :定义了用户可以在编译时或者运行时传递的变量,JAR_FILE是项目打包后的jar名称
  • ADD:拷贝文件并重新命名
  • ENTRYPOINT:为了缩短 Tomcat 的启动时间,添加
    java.security.egd
    的系统属性指向
    /dev/urandom
    作为

Docker打包环境配置

Docker安装

这里是在CentOS7.6上安装docker环境

请参考我的另一篇博文 CentOS7.6安装Docker,注意,需要使用Docker 中国加速器,否则下载镜像时,会超时。

JDK安装

yum install java java-devel

注:需要安转java-devel,否则Maven会报找不到JRE的错误,虽然执行java -version没有异常。

Maven安装

请参考另一篇博文Linux(CentOS7.x)下安装Maven

在Docker环境部署Spring boot项目

将demo项目上传到服务器,进入项目进行打包测试

mvn clean package

启动测试项目是否正常工作

java -jar target/demo-0.1.ja

看到成功日志说明环境没有问题,接下来我们使用 DockerFile 构建镜像

使用Dockerfile构建镜像

mvn clean package dockerfile:build

构建成功后验证,生成了期望的viki/demo的镜像

[root@MiWiFi-R3-srv demo]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
viki/demo               latest              07a1ed182817        9 seconds ago       119MB

使用镜像

[root@MiWiFi-R3-srv demo]# docker run -p 8080:8080 -t viki/demo

.   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v2.1.1.RELEASE)

看到容器中的应用成功启动。

在浏览器中访问 http://宿主机IP:8080/hello

看到期望的返回结果:Hello Docker World

构建成功!

碰到的问题

  1. docker:build 时报如下错误:
[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/root/.m2/repository), alimaven (http://maven.aliyun.com/nexus/content/groups/public/)] -> [Help 1]

解决方法是:解决办法是修改 maven 的配置文件 settings.xml,在pluginGroups 处增加如下内容,

<pluginGroups>
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
  1. Must specify baseImage if dockerDirectory

    应该使用

    mvn clean package dockerfile:build
    ,而不是
    mvn clean package docker:build

参考文档

1、使用Docker 部署Spring Boot项目

2、spring boot官网docker构建章节

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: