Skip to content

Spring Boot(Maven)+Docker打包

本文可以实现:将Spring Boot项目从GitHub clone到服务器上后,一条命令直接完成依赖下载-编译-镜像生成-容器运行。

注意:本文Spring Boot项目为单机部署,即只在一台服务器进行部署,并使用Maven构建项目,通过公网IP访问数据库。

前提

Spring Boot项目已可使用Maven打包为jar文件,并可通过java -jar example-0.0.1-SNAPSHOT.jar启动此文件。

必须安装Docker,Docker Compose。

操作

  • 第一步:在项目根目录下创建文件Dockerfile,内容如下,本文项目使用的是jdk11,开放8086端口。注意:需要将下文的两处example-0.0.1-SNAPSHOT改为你的项目的名字。

    dockerfile
    FROM maven:3.8.3-openjdk-11 AS MAVEN_BUILD
    COPY settings.xml /usr/share/maven/conf/settings.xml
    COPY pom.xml /build/
    COPY src /build/src/
    WORKDIR /build/
    RUN mvn package
    
    FROM maslick/minimalka:jdk11
    COPY --from=MAVEN_BUILD /build/target/example-0.0.1-SNAPSHOT.jar /app/
    EXPOSE 8086
    ENTRYPOINT ["java","-jar","/app/example-0.0.1-SNAPSHOT.jar"]
  • 第二步:在项目根目录下创建文件settings.xml,目的是为了替换掉Maven官方源,使用国内源,文件内容如下:

    xml
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <localRepository/>
        <interactiveMode/>
        <usePluginRegistry/>
        <offline/>
        <pluginGroups/>
        <servers/>
        <mirrors>
            <mirror>
                <id>aliyunmaven</id>
                <mirrorOf>central</mirrorOf>
                <name>阿里云公共仓库</name>
                <url>https://maven.aliyun.com/repository/central</url>
            </mirror>
            <mirror>
                <id>repo1</id>
                <mirrorOf>central</mirrorOf>
                <name>central repo</name>
                <url>http://repo1.maven.org/maven2/</url>
            </mirror>
            <mirror>
                <id>aliyunmaven</id>
                <mirrorOf>apache snapshots</mirrorOf>
                <name>阿里云阿帕奇仓库</name>
                <url>https://maven.aliyun.com/repository/apache-snapshots</url>
            </mirror>
        </mirrors>
        <proxies/>
        <activeProfiles/>
        <profiles>
            <profile>
                <repositories>
                    <repository>
                        <id>aliyunmaven</id>
                        <name>aliyunmaven</name>
                        <url>https://maven.aliyun.com/repository/public</url>
                        <layout>default</layout>
                        <releases>
                            <enabled>true</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                    <repository>
                        <id>MavenCentral</id>
                        <url>http://repo1.maven.org/maven2/</url>
                    </repository>
                    <repository>
                        <id>aliyunmavenApache</id>
                        <url>https://maven.aliyun.com/repository/apache-snapshots</url>
                    </repository>
                </repositories>
            </profile>
        </profiles>
    </settings>
    • 第三步:在项目根目录下创建文件docker-compose.yml,内容如下:
    yml
    version: '3'
    services:
      web:
        build: .
        ports:
          - "8086:8086"

    此时内容已经填充完毕,可以将项目推送至GitHub,下面一条命令直接从源代码部署运行。

    • 第四步:部署运行。

    在项目根目录下,执行如下命令,

    shell
    docker-compose up

    如果你想在后台执行该服务可以加上 -d 参数:

    shell
    docker-compose up -d

    等待项目构建运行即可!

最后

​ 项目构建运行完成之后,通过docker images会发现除了多出了一个我们刚构建的项目镜像之外,额外多了两个镜像maven:3.8.3-openjdk-11minimalka:jdk11,这是构建我们自己的镜像时必须要用的基础镜像,如果以后还需要再此构建项目,可以将这两个镜像保留,否则可以将其删除。

​ 如果项目要连接数据库,可以使用公网IP进行连接,下文将Springboot与Mysql进行了部署。