不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据我了解,容器化部署应该是目前的主流方案。
微服务不同于传统的单体应用,由于服务数量多,部署时候由于环境啊、配置等出现的问题又多,这个时候,结合 Docker 来部署,就可以很好的解决这个问题,这也是目前使用较多的方案之一。
将 Spring Boot 项目打包到 Docker 容器中部署,有很多不同的方法,今天我主要来和大家聊一聊如何将 Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目。
一、准备工作
1、准备 Docker
我这里以 Mac 为例来给大家演示,安装我这里就不说了。也不是今天的主题,具体安装可以看我下一篇文章
下载链接我可以放一个:https://www.docker.com/
2、准备idea
idea安装就不说了,这里需要安装一个插件,点击File->Setting->Plugins->Browse Repositories
3、配置远程连接地址
配置一下 Docker 的地址,配置完成后,可以看到下面有一个 Connection successful 提示,这个表示 Docker 已经连接上了。
如此之后,我们的准备工作就算是 OK 了。
二、准备项目
接下来我们来创建一个简单的 Spring Boot 项目(只需要引入 spring-boot-starter-web
依赖即可),项目创建成功之后,我们再创建一个普通的 HelloDockerController
,用来做测试,如下:
@RestController
public class HelloDockerController {
@GetMapping("/hello")
public String hello() {
return "hello docker!";
}
}
三、配置 Dockerfile
1、我创建一个 Dockerfile ,作为我镜像的构建文件,具体位置如下图:
具体内容如下
## FROM,表示使用Jdk8环境为基础镜像,如果镜像不是本地的会从DockerHub进行下载
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER qiwu
## VOLUME,VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。
## 这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# WORKDIR /server-config
## ADD,拷贝文件并且重命名
ADD server-config.jar app.jar
## ENTRYPOINT,为了缩短Tomcat的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINT
# RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
# 指定容器需要映射到主机的端口
EXPOSE 8888
2、pom文件添加插件
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!-- <imageTags>-->
<!-- <imageTag>${project.version}</imageTag>-->
<!-- </imageTags>-->
<!-- <forceTags>true</forceTags>-->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
这个插件的配置不难理解:
-
首先在 execution 节点中配置当执行 mvn package 的时候,顺便也执行一下 docker:build
-
然后在 configuration 中分别配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。
-
最后 resource 节点中再配置一下 jar 的位置和名称即可。
OK,做完这些我们就算大功告成了。
四、maven打包
这样启动成功
五、启动
1、命令启动
docker run -p 8080:8080 -t springboot/server-config
2、idea启动
创建启动
设置端口,名字
启动和启动程序一样,右边是日志
项目运行成功之后,在浏览器输入远程服务器的地址,就可以访问了:
如此之后,我们的 Spring Boot 项目就算顺利发布到远程 Docker 容器中了。
好玩吗?试试!
个人博客:
名称:纯洁的麦田
链接:http://www.idearyou.cn/
描述:争取哪一天做上架构师
公众号:纯洁的麦田
另外:个人公众号,每天有新java文章,还有中高级面试题分享