springboot微服务项目打包成docker镜像详解(代码片段)

大忽悠爱忽悠 大忽悠爱忽悠     2023-01-13     457

关键词:


SpringBott打包成Docker镜像的两种方式

  • 将springboot项目打成一个jar包,上传linux服务器指定目录下,然后再对应的目录下编写一个Dockefile文件,然后进行打包
  • IDEA集成Docker插件,通过maven的docker插件,远程打包成镜像弄到linux上,并且可以在本机的IDEA中操作容器和镜像

下面介绍的是第二种方式,而不是第一种


第一步: 配置Docker的远程访问

1.修改 /usr/lib/systemd/system/docker.service

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

2.替换ExecStart

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 
替换为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

3.重启Docker服务

systemctl daemon-reload
systemctl restart docker

4.查看2375端口是否被监听

netstat -nlpt

5.服务器防火墙开启2375端口

firewall-cmd --add-port=2375/top --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

6.检查是否配置好

linux主机ip加2375端口号/version,如果出来了东西,表示配置成功


IDEA配置

Docker插件安装,并设置远程docker的地址


pom.xml添加maven-docker插件,自动生成镜像,并推送到仓库

如果使用maven-docker插件,可以选择在configuration标签中指定dockerfile的文件位置,也可以在configuration中自己配置替代dockerfile文件

下面第一种是指定dockfile文件的位置:

 <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
<!--进行相关配置-->
                <configuration>
                    <!-- 指定 Dockerfile 路径  $project.basedir:项目根路径下-->
                    <dockerDirectory>$project.basedir</dockerDirectory>
                    <!--指定生成的镜像名: 前缀/项目名称-->
                    <imageName>xfx/$project.artifactId</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 远程docker的地址-->
                    <dockerHost>Http://192.168.112.128:2375</dockerHost>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>$project.build.directory</directory>
                            <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile 中添加的文件名 -->
                            <include>$project.build.finalName.jar</include>
                        </resource>
                    </resources>

                </configuration>
            </plugin>

对应的Dockerfile文件

#基础镜像通过java8来的
FROM java:8
#挂载卷是临时目录
VOLUME /tmp
#将Demo1-520.finnally.jar.jar  拷贝到容器内的的Demo1-520.finnally.jar.jar中(这个Demo1-520.finnally.jar.jar是自己生成的)
COPY target/Demo1-520.finnally.jar /xfx.jar
#暴露端口
EXPOSE 80
#执行命令java  -jar
ENTRYPOINT ["java","-jar","/xfx.jar"]

这里COPY的相对路径,是从当前Dockerfile所在目录开始

COPY target/Demo1-520.finnally.jar /xfx.jar

完全替代dockerfile文件

   <properties>
        <java.version>1.8</java.version>
        <docker.image.prefix>xfx</docker.image.prefix>
    </properties>

    <build>
        <plugins>
            <plugin>
<!--                springboot用来生成jar包的插件-->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>

<!--   configuration替代编写的Dockerfile文件             -->
                <configuration>
<!--                 指定基础镜像-->
                    <baseImage>java</baseImage>
<!--                    创作者本人的信息-->
                    <maintainer>dhy dhy@qq.com</maintainer>
<!--                    切换到root目录-->
                    <workdir>/ROOT</workdir>
<!--                    执行的命令-->
                    <cmd>["java","-version"]</cmd>
                    <entryPoint>["java","-jar","$project.build.finalName.jar"]</entryPoint>
                    
<!--                    指定Dcokerfile路径,$project.basedir:项目根路径-->
<!--                    <dockerDirectory>$project.basedir</dockerDirectory>-->
                  
                    
                    <!--指定生成的镜像名: 镜像名前缀/项目名称-->
                    <imageName>$docker.image.prefix/$project.artifactId</imageName>
                    
                    <!--指定标签-->
                    <imageTags>
<!--                        可替换为当前项目的版本号-->
                        <imageTag>$project.version</imageTag>
                    </imageTags>
                    
                    <!-- 远程docker api 地址-->
                    <dockerHost>Http://192.168.112.128:2375</dockerHost>
                    
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
<!--                            放到容器哪个目录下面-->
                            <targetPath>/ROOT</targetPath>
<!--                            用于指定需要复制的根目录-->
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>$project.build.directory</directory>
<!--                            用于指定需要复制的文件-->
                            <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile 中添加的文件名 -->
                            <include>$project.build.finalName.jar</include>
                        </resource>
                    </resources>

                </configuration>
            </plugin>

        </plugins>
    </build>

如上用docker-maven插件,自动生成如下文件:

FROM java
MAINTAINER dhy dhy@qq.com
WORKDIR /ROOT
ADD /ROOT/Demo1.jar /ROOT/
ENTREPOINT ["java","-jar","Demo1.jar"]
CMD ["java","-version"]

执行mvn命令

mvn clean package docke:build
清理,打包,构建

执行mvn命令,有点繁琐,可以绑定插件的运行时间到maven执行打包的生命周期阶段

将Docker命令绑定到maven各个阶段

我们可以把Docker分为build,tag,push,然后分别绑定到Maven的package,deploy阶段

我们只需要执行mvn deploy就可以完成build,tag,push操作,当我们执行mvn build就只完成build,tag操作

                <executions>
      <!--当执行mvn package时,执行 mvn clean package docker:build-->
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
          <!--当执行mvn package时,会对镜像进行标签设定-->  
                       <execution>
                        <id>tag-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:tag-->
                        <phase>package</phase>
                        <goals>
                            <goal>tag</goal>
                        </goals>
                        <configuration>
                        <image>$docker.image.prefix/$project.artifactId:latest</image>
                        <newName>docker.io/$docker.image.prefix/$project.artifactId:$project.version</newName>
                        </configuration>
                    </execution>
           <!--当执行mvn deploy 时,执行 mvn deploy docker:push-->
                    <execution>
                        <id>push-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:push-->
                        <phase>deploy</phase>
                        <goals>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>

参考文章

一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!

idea整合docker远程部署springboot项目

springboot 整合 docker, 进行自动化部署,其实没你想象的那么难

(十七)SpringBoot微服务项目打包成Docker镜像详解

idea使用插件远程linux打包docker镜像(点两下直接打包启动好)

docker06_springboot微服务项目打包成docker镜像详解(代码片段)

...包,多阶段构建①.构建SpringBoot项目①.创建一个springboot微服务项目②.编写测试类@RestController@SpringBootApplicationpublicclassDemoApplicationpubl 查看详情

docker一键打包微服务(代码片段)

...er仓库中这里我们采用jib-maven-plugin来进行来构建容器化的springboot应用程序,Jib可以让不写Dockerfile就能实现Docker打包什么是JibJib带来的是,它允许您通过简单地将插件添加 查看详情

springboot微服务打包为docker镜像(代码片段)

1、构建springboot项目2、打包应用3、编写dockerfileFROMjava:8COPY*.jar/app.jarCMD["--server.port=8080"]EXPOSE8080ENTRYPOINT["java","-jar","/app.jar"]4、构建镜像dockerbuild-tspringbootd 查看详情

springboot的项目打包成的jar包,制作成docker镜像并运行

...作首先把本地的项目打包好,我这里直接把已经打包好的springboot-mybatis-0.0.1-SNAPSHOT.jar包直接上传到linuxmydemo目录中并在此目录创建Dockerfile文件/usr/local/mydemo构建DockerFile:vimDockerFile说明:FROM::项目依赖,需要一个java8版本的jdkADD 查看详情

dockermaven打包springboot项目成docker镜像并上传到harbor仓库(eclipsestsideamaven通用)

写在前面最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本解决不了问题,纯属扯淡。作为一个技术人... 查看详情

javaspringboot项目打包成docker镜像(代码片段)

背景我们的服务是springboot开发的,但是部署的时候是使用的docker部署的,所以在打包的时候,需要打包成dockerimage,下面说说如何进行配置,才能在package的时候得到docker镜像。环境本地环境打包的话,要... 查看详情

怎么把springboot打包成镜像部署到docker

你好,当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过dockerhistory命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Doc... 查看详情

springboot打包成jar,使用docker部署,关于文件上传本地哪些事(代码片段)

...:需要给HR写一个自动祝福生日的机器人,就用了SpringBoot构建了一个项目,之后打包成jar,构建docker镜像,部署。问题:因为,员工有关的信息,是无法通过某一个接口获取到的,所以是需要每... 查看详情

docker部署springboot项目

Docker相关安装dockeryum-yinstalldocker(centos下)运行docker服务servicedockerstart或者/bin/systemctlstartdocker.serviceIdea新建web项目编写测试controller,打包成jar包,测试可运行访问并输出内容;编写DockerfileFROMjava:8EXPOSE86VOLUME/tmpADDdock 查看详情

docker运行jenkins及vue项目与springboot项目(五.jenkins打包springboot服务且在docker中运行)

docker运行jenkins及vue项目与springboot项目:一.安装docker二.docker运行jenkins为自动打包运行做准备三.jenkins的使用及自动打包vue项目四.docker运行nginx五.jenkins打包springboot服务且在docker中运行1.立即构建输入任务名称:service_blog选择maven项... 查看详情

在idea中如何将springboot项目打包成可执行的jar包并发布到linux服务

...成一个可执行的jar包,并发布到linux服务器的步骤。因为springboot有内置的tomcat所以一般使用内置的tomcat就可以可,当然也使用外部的tomcat容器。如有疑问可以添加qq:850534486交流步骤1:File->ProjectStructure步骤2:ProjectSettings->Ar 查看详情

springboot(maven)+docker打包(代码片段)

SpringBoot(Maven)+Docker打包本文可以实现:将SpringBoot项目从GitHubclone到服务器上后,一条命令直接完成依赖下载-编译-镜像生成-容器运行。注意:本文SpringBoot项目为单机部署,即只在一台服务器进行部署,并使... 查看详情

微服务系列教程

...含SpringCloud基础视频教程、SpringCloud高级教程+项目实战、Springboot入门教程、Springboot进阶教程、SpringEcosystem微服务相关、SpringBoot入门IDEA版本、SpringBoot实战与原理分析视频课程、docker构建微服务、docker入门、docker进阶、docker解析... 查看详情

docker与springboot的集成:docker-maven-plugin使用

使用SpringBoot编写了一个微服务后,如何将构建应用并打包成docker镜像,推送到docker仓库,以供测试环境测试。docker-maven-plugin插件可以完成这项任务。最近使用了docker-maven-plugin插件,想写一篇关于使用总结的文章,但发现它在git... 查看详情

springboot项目docker打包dockerfile(代码片段)

新建Dockerfile内容如下FROMopenjdk:8u272-jdkasbuilderWORKDIRapplicationARGJAR_FILE=target/app-2.0.jarCOPY$JAR_FILEapplication.jarRUNjava-Djarmode=layertools-jarapplication.jarextractFROMopenjdk:8u272 查看详情

docker运行jenkins及vue项目与springboot项目(四.docker运行nginx)

docker运行jenkins及vue项目与springboot项目:一.安装docker二.docker运行jenkins为自动打包运行做准备三.jenkins的使用及自动打包vue项目四.docker运行nginx五.jenkins打包springboot服务且在docker中运行准备配置创建/home/jenkins/docker/nginx/nginx.conf文件... 查看详情

docker部署springboot项目

Docker相关安装dockeryum-yinstalldocker(centos下)运行docker服务servicedockerstart或者/bin/systemctlstartdocker.serviceIdea新建web项目编写测试controller,打包成jar包,测试可运行访问并输出内容;编写DockerfileFROMjava:8EXPOSE86VOLUME/tmpADDdocker_demo-0.0.1-SN... 查看详情

springboot+docker项目打包(jar)和部署

参考技术A一、打包SpringBoot项目1.检查pom文件是否有maven打包插件2.选择IDEA右侧Maven,点击install(如果配置了maven的环境变量,则可以在控制台输入:mvninstall命令,同样可以打包jar包)等待maven打包,当控制台出现下列日志时表示打... 查看详情