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

 更新时间:2023年05月05日 09:39:01   作者:Touch&  
这篇文章主要介绍了Docker 快速部署Springboot项目超详细最新版的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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启动

maven插件

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

docker插件

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

到此这篇关于Docker 快速部署Springboot项目超详细最新版的文章就介绍到这了,更多相关Docker 部署Springboot项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用shardingsphere对SQLServer坑的解决

    使用shardingsphere对SQLServer坑的解决

    本文主要介绍了使用shardingsphere对SQLServer坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • 解析HashMap中的put方法执行流程

    解析HashMap中的put方法执行流程

    在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也是面试中的高频考点,本篇文章就来分析一下HashMap集合中的put方法
    2021-12-12
  • Java基于正则表达式实现xml文件的解析功能详解

    Java基于正则表达式实现xml文件的解析功能详解

    这篇文章主要介绍了Java基于正则表达式实现xml文件的解析功能,结合实例形式分析了java使用正则表达式针对xml文件节点的相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • 秒懂Kotlin之Java工程师快速掌握Kotlin的技巧

    秒懂Kotlin之Java工程师快速掌握Kotlin的技巧

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。这篇文章主要介绍了秒懂Kotlin之Java工程师快速掌握Kotlin的技巧,需要的朋友可以参考下
    2021-09-09
  • SpringIOC refresh()初始化代码实例

    SpringIOC refresh()初始化代码实例

    这篇文章主要介绍了SpringIOC refresh()初始化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Flowable执行完毕的流程查找方法

    Flowable执行完毕的流程查找方法

    这篇文章主要为大家介绍了Flowable执行完毕的流程查找方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 详解如何在Java中重写equals()和hashCode()方法

    详解如何在Java中重写equals()和hashCode()方法

    在 Java 中,equals() 和 hashCode() 方法是 Object 类中定义的重要方法,它们用于比较对象的相等性以及计算对象的哈希值,本文将详细介绍如何在 Java 中重写 equals() 和 hashCode() 方法,并讨论其最佳实践,需要的朋友可以参考下
    2024-08-08
  • SpringBoot 整合 Elasticsearch 实现海量级数据搜索功能

    SpringBoot 整合 Elasticsearch 实现海量级数据搜索功能

    这篇文章主要介绍了SpringBoot 整合 Elasticsearch 实现海量级数据搜索,本文主要围绕 SpringBoot 整合 ElasticSearch 接受数据的插入和搜索使用技巧,在实际的使用过程中,版本号尤其的重要,不同版本的 es,对应的 api 是不一样,需要的朋友可以参考下
    2022-07-07
  • Java中网络IO的实现方式(BIO、NIO、AIO)介绍

    Java中网络IO的实现方式(BIO、NIO、AIO)介绍

    这篇文章主要介绍了Java中网络IO的实现方式(BIO、NIO、AIO)介绍的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java性能优化技巧汇总

    Java性能优化技巧汇总

    这篇文章主要介绍了Java性能优化技巧,汇总了提升java程序性能的常用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04

最新评论