大家好,我是walker
一个从文科自学转行的程序员~
爱好编程,偶尔写写编程文章和生活
欢迎关注公众号【I am Walker】,可以获取相关的学习资料哦
我的gitee:https://gitee.com/shen-chuhao/walker.git 里面很多技术案例!
前提条件
1、确保创建一个springboot项目,一个简单项目即可
2、该操作是在linux上运行的,所以要确保linux有安装
- maven:用来编译镜像
- docker:用来构建镜像
- git:用来拉取项目
相关安装文章可查看:
【maven系列】linux安装maven
【git系列】linux安装git并拉取项目
【docker系列】linux安装docker和docker-compose
方式一:使用docker-maven-plugin插件构建镜像
1、编写pom.xml,配置插件
首先是springboot maven plungin
,用于maven编译的
其次是docker maven plugin
,用于maven和docker配合进行镜像的构建
<!-- docker maven插件
这边的版本根据自己的情况进行确认 version-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.4</version>
</plugin>
<!-- docker maven插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<!--指定执行packe命令时构建镜像-->
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<!--docker镜像相关的配置信息-->
<configuration>
<!--镜像名,这里用工程名-->
<imageName>${project.artifactId}</imageName>
<!--TAG,这里用工程版本号-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!--镜像的FROM,使用java官方镜像-->
<baseImage>openjdk:8-jdk-alpine</baseImage>
<!--该镜像的容器启动后,直接运行spring boot工程-->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!--构建镜像的配置信息-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
2、执行编译,构建镜像
在linux中进入创建好的springboot项目目录下
确保进行到有pom.xml的文件夹下,否则将无法执行mvn到对应的mvn 指令,
之后执行指令:
[root@localhost springboot-demo]# mvn clean package -DskipTests docker:build
当然如果你使用的是mvn -f
查询到对应的pom.xml的话也可以,例如
我现在在walker这个路径下,然后我想执行springboot-demo
的mvn指令,
那么我可以使用mvn -f springboot-function/springboot-demo
去查找到对应的pom.xml
然后进行编译
3、查看镜像是否创建
docker images
可以查看到我们创建的镜像,而镜像的名称和标签是由我们在pom.xml中配置的
方式二:指定dockerfile
1、添加插件
<!--maven plugin
版本根据自己的springboot版本确认-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.4</version>
</plugin>
<!--创建docker maven plungin插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<!-- 镜像名称-->
<imageName>${project.artifactId}</imageName>
<!-- dockerfile文件的目录 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!-- 镜像tag-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
注意:
- 这边需要确保dockerfile的文件目录,上面配置的是
${project.basedir}/src/main/docker
2、编写dockerfile
根据自己编写dockerDirectory
创建dockerfile文件
# 镜像来源
FROM openjdk:8-jdk-alpine
# 将jar包移动到app.jar
ADD springboot-jdbc-v1.jar app.jar
# 启动jar包
ENTRYPOINT ["java","-jar","/app.jar"]
# 暴露端口
EXPOSE 9090
注意:
- 这里的
springboot-jdbc-v1.jar
根据实际情况填写,这个组成结构是项目-版本号
,来自于
而版本号和项目名来自于这里,要确保结果一致
3、执行指令
切换到对应项目的pom.xml目录下: 执行下面指令
mvn clean package -D maven.test.skip=true docker:build
-D maven.test.skip=true
:代表的是排除test的编译,可以加快编译的速度
docker:build
:代表的是docker编译
clean和package分别是清除和打包了
如果出现build success
就代表编译成功了
4、查看镜像
5、启动容器
docker run --name springboot-jdbc springboot-jdbc:v1
出现这个结果就代表测试启动容器成功了