热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot应用通过Docker发布部署

原标题:SpringBoot应用通过Docker发布部署将SpringBoot项目部署到docker中有两种方法,手动部署和插件部署手动部署

原标题:Spring Boot应用通过Docker发布部署

将Spring Boot项目部署到docker中有两种方法,手动部署和插件部署


手动部署


1、idea创建spring boot项目

pom.xml文件

www.yii666.com;
<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">

<parent>
<artifactId>spring-cloud-examplesartifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>DockerDemoartifactId>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>

必须添加 spring-boot-maven-plugin 插件,该插件的作用是在打 Jar 包时引入依赖包,当运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用 “java -jar” 命令就可以直接运行。

启动类

package dockerdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
imp文章来源站点https://www.yii666.com/ort org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@RequestMapping("/hello")
public String hello(){
return "Hello Docker World!";
}
}


2、项目打成 Jar 包

然后在项目pom.xml文件所在目录执行maven命令将项目打成 Jar 包

$ mvn package

从输出日志可知 Jar 在 target 目录下,直接运行 Jar 包

$ java -jar DockerDemo-1.0-SNAPSHOT.jar

然后在浏览器中输入 http://localhost:8080/hello 进行测试
在这里插入图片描述


3、构建 docker image

创建Dockerfile文件

FROM java:8
VOLUME /tmp
ADD DockerDemo-1.0-SNAPSHOT.jar DockerDemo.jar
RUN bash -c "touch /DockerDemo.jar"
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/DockerDemo.jar"]

参数解释:


  • FROM:表示以JDK8为基础镜像制作docker镜像

  • VOLUME:表示创建一个挂载点,容器目录为 /tmp,主机目录自动生成。创建 /tmp 是因为Spring Boot内嵌的Tomcat容器默认使用 /tmp 作为工作目录

  • ADD:将容器外的 DockerDemo-1.0-SNAPSHOT.jar 拷贝到容器中,并重命名为 DockerDemo.jar

  • RUN:RUN 后面跟着bash命令,-c 表示将后面的字符串当命令执行,即执行 touch /DockerDemo.jar,该命令修改 DockerDemo.jar 文件的访问时间和修改时间为当前时间

  • ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短Tomcat的启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为 ENTRYPOINT

创建好 Dockerfile 后,把打包好的 Spring Boot 项目 jar 包和 Dockerfile 文件放在任意一个目录下,使用 docker 命令构建镜像文件:

$ docker image build -t DockerDemo:1 .

参数解释:


  • build:表示制作镜像

  • -t:表示给镜像打个标签,相当于 docker tag 镜像ID 新镜像名:版本号

  • .:表示Dockerfile文件所在位置,. 表示在当前目录



4、查看并运行镜像

#查看镜像:
$ docker images
#运行镜像:
$ docker contai文章来源地址51849.htmlner run --name DockerDemo -d -p 80:8080 DockerDemo:1

参数解释:


  • docker container run:表示运行容器

  • –name:给容器起个别名,操作容器的时候可以使用别名来代替容器ID,方便容器的管理

  • -d:表示容器开启后在后台运行

  • -p:端口映射。将容器内部的8080端口映射到宿主机的80端口

在这里插入图片描述


插件部署

插件部署要在项目的 pom.xml 文件中添加 dockerfile-maven-plugin 插件


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">

<parent>
<artifactId>spring-cloud-dockerartifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>spring-cloud-eurekaartifactId>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8&文章来源地址51849.htmllt;/project.reporting.outputEncoding>

<docker.image.prefix>
registry.cn-huhehaote.aliyuncs.com/monkeybrain
docker.image.prefix>

<docker.tag>latestdocker.tag>


properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-eureka-swww.yii666.comerverartifactId>
dependency>
dependencies>
<profiles>


profiles>
<build>

<defaultGoal>installdefaultGoal>
<finalName>${project.artifactId}finalName>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
<plugins>

<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<executable>trueexecutable>
configuration>
plugin>

<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<skipTests>trueskipTests>
configuration>
plugin>

<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>0.4.13version>

<configuration>

<dockerHost>http://localhost:2375dockerHost>
<imageName>${docker.image.prefix}/${project.build.finalName}imageName>
<serverId>aliyun-docker-registryserverId>
<registryUrl>registry.cn-huhehaote.aliyuncs.comregistryUrl>
<pushImage>truepushImage>

<imageTags>
<imageTag>latestimageTag>
imageTags>

<baseImage>java:8baseImage>

<entryPoint>
["java","-jar","/${project.build.finalName}.jar"]
entryPoint>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>



configuration>
plugin>
plugins>
build>
project>


运行推送命令

$ mvn clean package docker:build -DpushImage

来源于:Spring Boot应用通过Docker发布部署


推荐阅读
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • SpringCloud+SpringBoot 项目搭建 (一)  Eureka
    SpringCloud+SpringBoot项目搭建(一)Eureka-SpringCloud+SpringBoot项目搭建(一)Eureka基础SpringBoot+Eur ... [详细]
  • springboot系列(二)创建springboot工程
    https:www.cnblogs.commagicalSamp7171716.html简介SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spri ... [详细]
  • 这里是以spring-core模块来说明方法,对于其他的例如spring-bean等模块也适用。1.下载springframework源码github地址ÿ ... [详细]
  • 本文整理了Java中com.fasterxml.jackson.databind.JavaType.withContentType()方法的一些代码示例,展示了 ... [详细]
  • Maven 无法打包jar到 Tomcat
    今天新来的同事,让他调试短信验证的接口。跟我说添加的aliyun的短信验证服务无法在tomcat上运行。然后给我看了报错信息:java.lang.NoClassDefFoundEr ... [详细]
  • Mask-RCNN源码阅读笔记
    阅读了https:blog.csdn.netu011974639articledetails78483779?locationNum9&fps1这篇博客这篇博客介 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 最近学习了数据挖掘常用的两种算法:FP-Growth和K-Means。现在把我的学习结果分享给大家。以下是本文的目录,大家可以根据需要跳过一些章节:1.FP-Grow ... [详细]
  • 1.方法一:采用OleDB读取EXCEL文件:把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:publicDa ... [详细]
  • 配 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
author-avatar
木卫二
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有