SpringBoot 通过maven插件实现docker镜像打包

4,521 阅读2分钟

docker 安装

请参考这篇文档:juejin.cn/post/709072…

docker 开启远程访问

参考:www.cnblogs.com/hongdada/p/…

停止docker服务

为了防止restart docker服务出现错误,保险起见,最好先停止docker服务,再修改配置文件;停止docker之前要先停止正在运行的容器,否则后面启动容器也有可能出错。 停止某个容器:

docker stop [container_id]

停止所有容器:

docker stop `docker ps -aq`

然后停止docker服务:

systemctl stop docker

docker配置文件修改

为了使用HTTP方式让IDEA连上服务器上的docker,需修改docker的配置文件(实现方式有多种,这只是其中之一),修改内容如下: 1.修改配置文件:

vim /usr/lib/systemd/system/docker.service

2.修改Execstart 这行内容,将其替换为以下内容,目的是开放2375端口,能进行HTTP远程连接:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

刷新配置并重启

systemctl daemon-reload && systemctl restart docker

防火墙开启2375端口(防火墙关闭无须此操作)

开放端口:

firewall-cmd --zone=public --add-port=2375/tcp --permanent

防火墙reload:

firewall-cmd --reload

测试

浏览器输入ip:2375/version,出现json则代表开启成功了

image.png

maven项目打包

打包插件

在pom文件中添加springboot打包插件:

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

docker打包插件配置

<docker.image.prefix>springboot</docker.image.prefix>

<!-- Docker maven plugin -->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.2</version>
    <configuration>
        <dockerHost>http://192.168.253.141:2375</dockerHost>
        <!--镜像名字 不能含有大写字母-->
        <imageName>${project.artifactId}</imageName>
        <!--build 的時候镜像的tag,但是会保留latest-->
        <imageTags>
            <tag>${project.version}</tag>
        </imageTags>
        <!--dockerfile所在位置-->
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <!--target所在位置-->
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <!--将jar包和Dockerfile放在统一目录-->
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

maven打包

先clean 再 package

image.png

docker镜像构建

执行插件命令build镜像

image.png 日志输出:

[INFO] Scanning for projects...
[INFO] Building image spring-boot-docker
Step 1/4 : FROM openjdk:8-jdk-alpine

 ---> a3562aa0b991
Step 2/4 : VOLUME /tmp

 ---> Running in c8957155a74b
Removing intermediate container c8957155a74b
 ---> 3bd27410b9d3
Step 3/4 : ADD spring-boot-docker-1.0.jar app.jar

 ---> b85dfbb03396
Step 4/4 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 ---> Running in 43839b2b63b9
Removing intermediate container 43839b2b63b9
 ---> 6bf02a19146c
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 6bf02a19146c
Successfully tagged spring-boot-docker:latest
[INFO] Built spring-boot-docker
[INFO] Tagging spring-boot-docker with 1.0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.180 s
[INFO] Finished at: 2022-10-14T15:43:46+08:00
[INFO] ------------------------------------------------------------------------

docker机器上查看build的镜像

可以看到有两个镜像,一开始build的时候应该build的latest ,1.0这个是在latest的基础上tag出来的。

[root@localhost ~]# docker images | grep docker
spring-boot-docker               1.0                  6bf02a19146c        6 minutes ago       122MB
spring-boot-docker               latest               6bf02a19146c        6 minutes ago       122MB

运行构建的镜像

idea 链接docker

下载插件

image.png

连接docker

image.png

image.png

运行镜像

image.png

image.png

创建成功后访问

image.png 访问地址:ip:8080

image.png