在Intellij Idea中使用Docker运行spring-boot应用
2018-02-20 11:48
323 查看
有关于在Intellij Idea中使用Docker的文章有很多,但大都是以下的方式
1. 使用web应用(war包)进行部署的
2. 在同一个项目下使用Dockerfile
3. 配置pom.xml将jar文件到报道Dockerfile目录下
但实际项目中
1. 更多的是使用jar包
2. 希望现有项目能更方便的进行Docker部署,但又不想在原有项目上进行改动
所以,本文基于实际情况,进行一次探索,看看是否可以满足以上的要求
--------------------------------------------我是分割线----------------------------------------------------
一个Springboot项目,我们暂时命名为“spring-boot-maker”,
一个Docker项目,暂时命名为“docker-maker”。
spring-boot-maker项目进行自己的应用开发,不涉及任何docker相关的内容
docker-maker项目,将spring-boot-maker项目做成docker镜像(image),并以docker的方式启动运行。
两个项目是互相独立的,无法互相访问到。
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;
}
}项目创建完毕,我们启动,并在浏览器中试验一下,确保应用可以访问。
我们在项目下创建目录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
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-makerpom.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
相关文章推荐
- 如何使用windows版Docker并在IntelliJ IDEA使用Docker运行Spring Cloud项目
- Intellij IDEA 使用jrebel运行spring-boot并实现自动编译进行热部署
- 第一个SpringBoot web 应用使用maven构建Docker镜像并容器化运行
- Intellij IDEA 使用jrebel运行spring-boot并实现自动编译进行热部署
- 使用IntelliJ IDEA编写Scala在Spark中运行
- 如何使用Docker构建运行时间较长的脚本
- 使用 Docker 搭建 Java Web 运行环境
- 使用 Docker 搭建 Java Web 运行环境
- 使用 Docker 搭建 Java Web 运行环境
- IntelliJ idea 下如何使用spring2.5+log4j
- Tomcat源码阅读系列(一)使用IntelliJ IDEA运行Tomcat6源码
- 转:使用 Docker 搭建 Java Web 运行环境
- 使用 Docker 搭建 Java Web 运行环境
- CentOS6.5使用 Docker 搭建 Java Web 运行环境
- docker深入1-使用docker运行nsq
- 使用docker构建jenkins镜像并运行容器
- junit 测试spring-test 代码!在项目中运行测试通过,留着以后直接使用
- IntelliJ IDEA 13.x 下使用Hibernate + Spring MVC + JBoss 7.1.1
- 使用docker运行应用程序
- 使用Spring整合Hibernate的小例子,内含所有jar包导入Eclipse即可运行