在本次实验的目的是学习将一个SpringBoot的应用打包并构建到镜像。
构建SpringBoot应用
在 IDEA 中构建一个 Maven 类型的项目, 命名为 hw-bmi-service-01。
将一下代码拷贝到 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.1.7.RELEASE</version> <relativePath/> </parent> <groupId>com.huawei.service</groupId> <artifactId>hw-bmi-service-01</artifactId> <version>0.0.1-SNAPSHOT</version> <name>hw-bmi-service-01</name> <description>Demo project for Spring Boot</description>
<properties> <java.version>1.8</java.version> <docker.image.prefix>springboot</docker.image.prefix> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
|
保存,项目会自动下载依赖库。
- 在源码中新增一个包(package),命名为: com.huawei.service.bmi.api
在包: com.huawei.service.bmi.api 中新增一个类, 命名为: OkApi
- 修改源代码如下:
1 2 3 4 5 6 7 8 9
| @RestController public class OkApi {
@RequestMapping("/ok") public String ok() { return "ok"; }
}
|
在IDEA 中运行程序,并通过浏览器访问服务。
在终端中执行 mvn clean package 命令进行打包。
构建包含应用的Docker镜像
- 在 pom 中加入以下 plugin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>#123;docker.image.prefix}/#123;project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>#123;project.build.directory}</directory> <include>#123;project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
|
保存,项目会自动更新依赖库
- 在 src/man 目录下新建一个名为 docker 的目录, 然后新增一个名为 Dockerfile 的文件,内容为:
1 2 3 4
| FROM openjdk:8-jdk-alpine VOLUME /tmp ADD hw-bmi-service-01-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
|
执行 mvn package docker:build 命令,将应用打包发布到 docker 容器中。
运行一下命令启动微服务
1
| docker run -p 8080:8080 -t springboot/hw-bmi-service-01
|