项目环境
- Spring Boot 2.3.0.RELEASE
- Java 8
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>springboot-dockerfile-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-dockerfile-demo</name> <description>Demo project for Spring Boot</description>
<properties> <java.version>1.8</java.version> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <layers> <enabled>true</enabled> </layers> </configuration> </plugin> </plugins> </build>
</project>
|
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package org.example.springbootdockerfiledemo.controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
@RestController public class TestController {
@RequestMapping("/") public String index() { return "Hello World!"; }
}
|
dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| FROM eclipse-temurin:8-jdk AS builder WORKDIR app ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar RUN java -Djarmode=layertools -jar app.jar extract
FROM eclipse-temurin:8-jre WORKDIR app COPY --from=builder app/dependencies/ ./ COPY --from=builder app/spring-boot-loader/ ./ COPY --from=builder app/snapshot-dependencies/ ./ COPY --from=builder app/application/ ./
ENV TZ=Asia/Shanghai VOLUME ["/tmp", "/app/log"] EXPOSE 8080
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
|
构建镜像
1 2
| mvn clean install -Dmaven.test.skip=true docker build -t springboot-dockerfile-demo:latest .
|
编写 docker-compose.yml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| version: '3'
services: springboot-dockerfile-demo: container_name: springboot-dockerfile-demo image: springboot-dockerfile-demo:latest restart: always ports: - "8080:8080" environment: TZ: Asia/Shanghai volumes: - "./log:/app/log"
|
启动容器
运行后查看启动容器的情况
1 2
| docker ps docker compose logs
|
测试
浏览器访问 http://localhost:8080