本文演示Docker打包、运行本地Demo项目。
笔者安装了Windows版本Docker。
一、项目搭建
新建一个SpringBoot项目,引入依赖:
<properties>
<java.version>1.8</java.version>
<maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.8.0</version>
<configuration>
<allowInsecureRegistries>true</allowInsecureRegistries>
<container>
<entrypoint>
<arg>/entrypoint.sh</arg>
<option>-c</option>
<shell>bash</shell>
</entrypoint>
<ports>
<port>8989</port>
</ports>
<useCurrentTimestamp>true</useCurrentTimestamp>
</container>
<extraDirectories>
<paths>src/main/jib</paths>
<permissions>
<permission>
<file>/entrypoint.sh</file>
<mode>755</mode>
</permission>
</permissions>
</extraDirectories>
<from>
<image>hub.***.com/demo/jre:8u112</image>
</from>
<to>
<image>hub.***.com/cloud/${project.artifactId}:1.0.0-${maven.build.timestamp}</image>
</to>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.demo.DemoApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
二、添加配置文件:
application.yml:
spring:
profiles:
active: dev
application-dev.yml:
server:
port: 8989
三、添加打包脚本
entrypoint.sh:
#!/bin/sh
mkdir -p /applogs/${HOSTNAME}/logs
mkdir -p /data
ln -s /applogs/${HOSTNAME}/logs /data/
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
exec java ${JAVA_JVM} -noverify -XX:+AlwaysPreTouch -Dlog.path=/data -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "com.example.demo.DemoApplication" "$@"
四、编写测试启动类
①测试类
@RestController
@RequestMapping("/")
public class HelloController {
@PostMapping("test")
public String test(){
return "Hello World!";
}
}
②启动类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
五、打包及运行效果
①打包
mvn jib:dockerBuild -DsendCredentialsOverHttp=true
②本地Docker运行
③测试
测试验证OK。