【docker系列】mvn使用docker build构建镜像

大家好,我是walker
一个从文科自学转行的程序员~
爱好编程,偶尔写写编程文章和生活
欢迎关注公众号【I am Walker】,可以获取相关的学习资料哦
我的gitee:https://gitee.com/shen-chuhao/walker.git 里面很多技术案例!

参考:
使用Maven构建Docker镜像

前提条件

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 指令,
[图片上传失败...(image-6536b1-1649584871192)]
之后执行指令:

[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
然后进行编译

[图片上传失败...(image-794f72-1649584871193)]

3、查看镜像是否创建
docker images
[图片上传失败...(image-61186a-1649584871193)]
可以查看到我们创建的镜像,而镜像的名称和标签是由我们在pom.xml中配置的
[图片上传失败...(image-8524b9-1649584871193)]

方式二:指定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文件
[图片上传失败...(image-17b283-1649584871193)]

# 镜像来源
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根据实际情况填写,这个组成结构是项目-版本号,来自于

[图片上传失败...(image-b56088-1649584871193)]
而版本号和项目名来自于这里,要确保结果一致
[图片上传失败...(image-228329-1649584871193)]

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就代表编译成功了
[图片上传失败...(image-87c66a-1649584871193)]

4、查看镜像

[图片上传失败...(image-19a787-1649584871193)]

5、启动容器

docker run --name springboot-jdbc springboot-jdbc:v1

出现这个结果就代表测试启动容器成功了
[图片上传失败...(image-1ebbdf-1649584871193)]

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容