当前位置:首页 > 行业动态 > 正文

springboot构建docker镜像

准备工作

在开始制作Docker镜像之前,我们需要确保已经安装了Docker,接下来,我们将创建一个简单的SpringBoot(2.3)应用,并将其打包成一个可执行的JAR文件,以下是创建一个简单的SpringBoot应用的步骤:

1、创建一个新的Maven项目,并在pom.xml文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2、在src/main/java目录下创建一个名为Application.java的文件,并添加以下代码:

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3、在src/main/resources目录下创建一个名为application.properties的文件,并添加以下内容:

server.port=8080

4、在项目根目录下运行以下命令,以打包应用为可执行的JAR文件:

mvn clean package

创建Dockerfile

接下来,我们需要创建一个Dockerfile,用于构建包含我们的SpringBoot应用的Docker镜像,在项目根目录下创建一个名为Dockerfile的文件,并添加以下内容:

使用官方的Java运行时基础镜像
FROM openjdk:8-jdk-alpine as build-stage
将项目的jar文件复制到容器中的/app目录下,并设置工作目录为/app
COPY target/demo-0.0.1-SNAPSHOT.jar /app/demo.jar
WORKDIR /app
ENTRYPOINT ["java","-jar","/app/demo.jar"]

构建Docker镜像

在项目根目录下运行以下命令,以构建包含我们的SpringBoot应用的Docker镜像:

docker build -t my-springboot-app --build-arg JAR_FILE=target/demo-0.0.1-SNAPSHOT.jar .

运行Docker容器并查看日志输出

运行以下命令,以启动一个新的Docker容器,并查看其日志输出:

docker run -d --name my-springboot-container my-springboot-app > logs.txt & tail -f logs.txt & wait $!  将日志输出重定向到logs.txt文件,并实时查看其内容(需要按Ctrl+C停止查看)

问题与解答

1、Q:如何在Docker容器中运行多个实例?A:可以使用docker run命令多次启动容器,docker run -d --name my-springboot-container1 my-springboot-app && docker run -d --name my-springboot-container2 my-springboot-app,这将同时启动两个名为my-springboot-container1和my-springboot-container2的容器。

0