在Intellij Idea中使用Docker运行spring-boot应用
有关于在Intellij Idea中使用Docker的文章有很多,但大都是以下的方式 1. 使用web应用(war包)进行部署的 2. 在同一个项目下使用Dockerfile 3. 配置pom.xml将jar文件到报道Dockerfile目录下但实际项目中 1. 更多的是使用jar包 2. 希望现有项目能更方便的进行Docker部署,但又不想在原有项目上进行改动所以,
有关于在Intellij Idea中使用Docker的文章有很多,但大都是以下的方式
1. 使用web应用(war包)进行部署的
2. 在同一个项目下使用Dockerfile
3. 配置pom.xml将jar文件到报道Dockerfile目录下
但实际项目中
1. 更多的是使用jar包
2. 希望现有项目能更方便的进行Docker部署,但又不想在原有项目上进行改动
所以,本文基于实际情况,进行一次探索,看看是否可以满足以上的要求
--------------------------------------------我是分割线----------------------------------------------------
运行环境
Docker for Windows (Windows 10)
第一步:在Intellij Idea中安装Docker Plugin
这步在很多文章中都有介绍,此处不详细说明,附图一张,设置路径为 File->settings
第二步:构想应用模式
基于“希望现有项目能更方便的进行Docker部署,但又不想在原有项目上进行改动”,我们需要创建2个项目,
一个Springboot项目,我们暂时命名为“spring-boot-maker”,
一个Docker项目,暂时命名为“docker-maker”。
spring-boot-maker项目进行自己的应用开发,不涉及任何docker相关的内容
docker-maker项目,将spring-boot-maker项目做成docker镜像(image),并以docker的方式启动运行。
两个项目是互相独立的,无法互相访问到。
第三步:创建springboot项目
创建springboot项目spring-boot-maker
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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>docker</groupId> <artifactId>spring-boot-maker</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
注意:<build>块必须要写,不然打包出的jar无法运行
SpringBootMakerApplication.java (启动类,很简单的一个)
package docker.spring.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootMakerApplication { public static void main(String[] args) { SpringApplication.run(SpringBootMakerApplication.class, args); } }
SpringBootMakerController.java (controller类)
package docker.spring.boot.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping(value = "/spring/boot") public class SpringBootMakerController { @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET) @ResponseBody public String hello(@PathVariable String name) { return "hello " + name; } }
项目创建完毕,我们启动,并在浏览器中试验一下,确保应用可以访问。
第四步:创建Docker项目
spring-boot项目是一个maven项目,而Docker项目就是一个目录。
我们在项目下创建目录spring-boot-maker,以表明这是创建给spring-boot-maker项目的。
在spring-boot-maker目录下创建文件Dockerfile
由于Dockerfile中的ADD和COPY命令只支持相对路径,所以无法使用绝对路径进行操作。
而修改spring-boot-maker项目中的pom.xml文件,将jar文件直接打包到Dockerfile所在目录下,不符合我们”不修改原项目“的初衷。
所以思路是:将spring-boot-maker项目编译好后打包,将打好包的jar文件Copy到Dockerfile所在目录,这些由bat(批处理)文件执行,Dockerfile执行创建镜像(image)的操作。
docker.run.bat
cd /d D:\SourceCode\workspace\test-for-docker\spring-boot-maker
call mvn clean package -U -DskipTests
cd /d %~dp0
del *.jar
copy D:\SourceCode\workspace\test-for-docker\spring-boot-maker\target\spring-boot-maker-*.jar spring-boot-maker-*.jar
ren spring-boot-maker-*.jar spring-boot-maker.jar
docker build -t spring-boot-maker .
docker run -d -p 8080:8080 --name spring-boot-maker spring-boot-maker
Dockerfile
# From java image, version : 8 FROM java:8 # 挂载app目录 VOLUME /app # COPY or ADD to image COPY spring-boot-maker.jar app.jar RUN bash -c "touch /app.jar" EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
直接执行bat文件,启动容器成功。
在浏览器中访问,成功。
以上我们成功的实现了预想中的要求,在不影响原有应用的基础上完成了Docker化改造。
git地址: https://github.com/SimonZhang1980/docker4springboot
更多推荐
所有评论(0)