Spring Boot | 使用Docker构建Spring Boot项目

190 阅读2分钟

我正在参与掘金创作者训练营第6期,点击了解活动详情

Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用及依赖包到一个可移植的容器中,然后发布到任何Linux、Windows或者Mac操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

打包项目

我们先打包执行如下命令打包下Spring Boot项目:

mvn clean package

构建Docker镜像

使用Docker构建Spring Boot应用程序,首先我们需要创建一个Dockerfile文件(没有后缀)。

然后在项目根目录下创建一个Dockerfile文件,Dockerfile文件的内容如下:

FROM openjdk:8
VOLUME /tmp
ADD target/learn-springboot-docker.jar /learn-springboot-docker.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/learn-springboot-docker.jar"]

下面对Dockerfile文件进行简单的说明。

第一行:使用openjdk:8作为基础镜像,指定jdk的版本。

第二行:临时文件目录。

第三行:learn-springboot-docker.jar是示例程序Jar包文件。

第四行:ENTRYPOINT用于指定容器启动时执行的命令,在容器启动时执行Jar文件。

接着,我们使用如下命令生成Docker镜像,构建的Docker镜像名称为test

docker build -t test .

运行Docker镜像

执行Docker镜像只需要执行docker run命令即可,其中可以通过-d来指定后台运行,-p来指定容器内端口以及服务器端口,最后指定运行的镜像名称。完整运行Docker镜像的代码如下所示:

docker run -d -p 7409:7409 test

这里笔者指定的端口号为7409

运行后,在浏览器地址栏输入项目访问地址http://localhost:7409/hello看到亲切的hello world就表示我们的项目部署成功了。

后记

笔者的Maven项目是多模块项目,learn-springboot-docker是项目中的一个模块,执行命令打包成功后,进入target目录,执行java -jar learn-springboot-docker.jar命令运行项目报错,错误信息如下:

xxx中没有主清单属性

解决办法

在子模块项目learn-springboot-dockerpom.xml文件中添加如下代码:

<build>
	...省略其它代码
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<executions>
				<execution>
					<goals>
						<goal>repackage</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
	...省略其它代码
</build>