信息发布→ 登录 注册 退出

Docker 快速部署Springboot项目超详细最新版

发布时间:2026-01-11

点击量:
目录
  • Docker 快速部署Springboot项目
    •  1、项目准备
      • 1.1 新建一个springboot项目
      • 1.2 打包
    • 2、编写Dockerfile文件
      •  3、执行镜像打包
        •  4、启动镜像
          • 5、测试结果 
            •  6、动态查看日志
            • 扩展:SpringBoot+Docker+IDEA 实现一键构建+推送、运行、同镜像多容器启动(推荐)
              • 场景:
                • 需求:
                  • 必要软件
                    • 父项目配置(关键配置):
                      • 子项目配置(关键配置)

                        Docker 快速部署Springboot项目

                        Docker 安装 (完整详细版)

                        Docker 日常命令大全(完整详细版)

                         1、项目准备

                        1.1 新建一个springboot项目

                        1.2 打包

                        mvn clean package -Dmaven.test.skip=true

                        2、编写Dockerfile文件

                        # Docker image for springboot file run
                        # VERSION 0.0.1
                        # Author: 
                        # 基础镜像使用java
                        FROM openjdk:8
                        # 作者
                        MAINTAINER laihx
                        # VOLUME 指定了临时文件目录为/tmp。
                        # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
                        VOLUME /tmp 
                        # 将jar包添加到容器中并更名为xx.jar
                        ADD demo.jar test.jar 
                        # 运行jar包
                        RUN bash -c 'touch /test.jar'
                        ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]

                        将jar包和Dockerfile文件放在上传到同一空目录下

                         3、执行镜像打包

                        sudo docker build . -t test-demo:v1.0

                        查看镜像

                        docker images

                        java8镜像:启动springboot需要jdk的支持,所以直接拉取java8镜像即可docker pull java:8,拉取结束可以使用docker images查看是否成功

                        docker pull java:8
                        docker images

                         4、启动镜像

                        # -d参数是让容器后台运行
                        # 8087为部署后实际代理端口,8089为程序的端口
                        sudo docker run -d -p 8087:8089 --name test-demo test-demo:v1.0 

                        5、测试结果 

                         6、动态查看日志

                        docker logs -f --tail=100 test-demo

                        扩展:SpringBoot+Docker+IDEA 实现一键构建+推送、运行、同镜像多容器启动(推荐)

                        场景:

                        由于公司项目需要,需要使用部署微服务项目,而之前都是使用tomcat部署,操作十分繁琐。最近正好在学习Docker,利用Docker容器做部署尝试

                        需求:

                        • 使用Docker部署服务
                        • 支持idea插件,一键操作构建、推送镜像、运行
                        • 单个镜像需根据不同端口部署多个容器
                        • 日志持久化

                        必要软件

                        服务器(我的版本为CentOS:7.9)

                        • Docker(需要开通远程访问,正式环境请使用证书加密,我这里测试用无加密)
                        • Harbor 镜像仓库(可选)

                        开发端

                        • Docker Desktop (支持本地运行docker-compose,如果不用docker-compose插件可以不用)下载地址
                        • 桌面版docker必要插件下载地址
                        • docker-comopse 下载地址
                        • IDEA(废话)
                        • docker插件 (可选,在idea插件市场下载,名字就叫Docker)

                        在idea中配置docker

                        目录结构:

                        父项目配置(关键配置):

                        pom.xml

                        <properties>
                            <!-- docker主机ip(这里填写自己docker所在地址) -->
                            <docker.host>192.168.10.10</docker.host>
                            <!-- harbor仓库地址(可选,构建镜像后自动上传到该仓库) -->
                            <docker.repostory>${docker.host}</docker.repostory>
                            <!-- docker远程地址, 如果是https协议则将http换成https即可 -->
                            <docker.remote>http://${docker.host}:2375</docker.remote>
                            <!--项目名,需要和Harbor中的项目名称保持一致 -->
                            <docker.registry.name>library</docker.registry.name>
                            <!-- 默认端口 -->
                            <port>8080</port>
                        </properties>
                        
                        ... 
                        
                        <build>
                            <pluginManagement>
                                <plugins>
                                    <!--构建镜像-->
                                    <plugin>
                                        <groupId>com.spotify</groupId>
                                        <artifactId>docker-maven-plugin</artifactId>
                                        <version>1.2.0</version>
                                        <configuration>
                                            <!--Maven 的配置文件 setting.xml 中增加相关 server 配置,主要配置 Docker registry用户认-->
                                            <serverId>docker-harbor</serverId>
                                            <dockerHost>${docker.remote}</dockerHost>
                                            <!-- 镜像名格式:   仓库地址/仓库项目名/当前项目名   (按需修改) -->
                                            <imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}</imageName>
                                            <baseImage>openjdk:8u282-jdk</baseImage>
                                            <maintainer>作者</maintainer>
                                            <env>
                                                <PORT>8080</PORT>
                                                <TZ>Asia/Shanghai</TZ>
                                            </env>
                                            <!-- 这里的ln和后面的操作是保证时间同步 -->
                                            <runs>mkdir -p /epark/logs &amp;&amp; ln -sf /usr/share/zoneinfo/$TZ /etc/localtime &amp;&amp; echo $TZ > /etc/timezone</runs>
                                            <volumes>/epark</volumes>
                                            <!--suppress UnresolvedMavenProperty -->
                                            <entryPoint>["java","-Djava.security.egd=file:/dev/./urandom","-jar","${project.build.finalName}.jar","--server.port=${PORT}"]
                                            </entryPoint>
                        					<!-- 这里是仓库地址,不需要可以删除 -->
                                            <registryUrl>http://${docker.repostory}</registryUrl>
                                            <!-- 这里指定是否构建成功后自动推送到仓库,不需要可以删除 -->
                                            <pushImage>true</pushImage>
                                            <resources>
                                                <resource>
                                                    <directory>${project.build.directory}</directory>
                                                    <include>${project.build.finalName}.jar</include>
                                                </resource>
                                            </resources>
                                        </configuration>
                                    </plugin>
                                    <!-- docker-compose的maven插件 -->
                                    <plugin>
                                        <groupId>com.dkanejs.maven.plugins</groupId>
                                        <artifactId>docker-compose-maven-plugin</artifactId>
                                        <version>2.5.1</version>
                                        <configuration>
                                        	<!-- 路径为: 当前项目的上一级(也就是父项目),所以不支持二级以上的子项目 -->
                                            <composeFile>${project.basedir}/../docker-compose.yml</composeFile>
                                            <apiVersion>1.22</apiVersion>
                                            <host>${docker.remote}</host>
                                            <envVars>
                                                <!-- 默认端口 -->
                                                <port>${port}</port>
                                                <host>${docker.repostory}</host>
                                                <name>${project.build.finalName}</name>
                                                <!-- 自定义项目名,支持单镜像启动多容器的关键 -->
                                                <COMPOSE_PROJECT_NAME>${project.build.finalName}-${port}</COMPOSE_PROJECT_NAME>
                                                <!-- 这里是证书配置,如果开启了docker证书,则需要配置 -->
                        <!--                            <DOCKER_TLS_VERIFY>1</DOCKER_TLS_VERIFY>-->
                        <!--                            <DOCKER_CERT_PATH>D:\docker-ca</DOCKER_CERT_PATH>-->
                                            </envVars>
                                        </configuration>
                                    </plugin>
                                </plugins>
                            </pluginManagement>
                        </build>

                        注意,${project.artifactId}引用的项目构件ID只能是小写

                        docker-compose.yml

                        version: '3.4'
                        services:
                          eparking:
                            # 镜像
                            image: ${host}/library/${name}:latest
                            # 容器名
                            container_name: ${name}-${port}
                            # 开机自启(自选)
                            #restart: always
                            # 环境配置
                            environment:
                              # 端口
                              - PORT=${port}
                            # 端口映射
                            ports:
                              - "${port}:${port}"
                            # 卷映射,这里日志根据自己项目输出位置调整
                            volumes:
                              - "/log/${name}/${port}:/logs/"

                        配置了仓库的话需要配置Maven的settings.xml的账号密码

                        <servers>
                            <server>
                                <id>docker-harbor</id>
                                <username>仓库用户名</username>
                                <password>仓库密码</password>
                            </server>
                        </servers>

                        子项目配置(关键配置)

                        pom.xml

                        <!-- 这里配置的端口会传入父项目,最终传入docker-compose.yml和Dockerfile文件 -->
                        <!-- 如果需要单个镜像启动多个容器,改这里的端口再启动就可以了 -->
                        <properties>
                        	<port>8082</port>
                        </properties>
                        
                        ... 
                        
                        <build>
                            <plugins>
                            	<!-- docker插件 -->
                                <plugin>
                                    <groupId>com.spotify</groupId>
                                    <artifactId>docker-maven-plugin</artifactId>
                                </plugin>
                                <!-- docker-compose的maven插件,由于docker插件不支持运行,所以单独安装了 -->
                                <plugin>
                                    <groupId>com.dkanejs.maven.plugins</groupId>
                                    <artifactId>docker-compose-maven-plugin</artifactId>
                                </plugin>
                            </plugins>
                        </build>

                        如果一切顺利maven中会出现docker和docker-compse插件
                        先执行docker:build构建,再执行docker-compose:up启动

                        成功后可以查看docker容器启动情况了,我这里使用的是docker插件

                        好了,这功能花费了我很长时间,最终实现了这些功能。可能还有些小细节没展示出来,可以尽管提问

                        在线客服
                        服务热线

                        服务热线

                        4008888355

                        微信咨询
                        二维码
                        返回顶部
                        ×二维码

                        截屏,微信识别二维码

                        打开微信

                        微信号已复制,请打开微信添加咨询详情!