spring-boot Docker 部署
環(huán)境
docker 18.09.7-ce
spring-boot 2.1.6.RELEASE
JDK 1.8
開始
- 從
https://start.spring.io/下載一個demo,只依賴web模塊,導入IDE. - 寫點測試代碼
@SpringBootApplication
@RestController
@RequestMapping("/demo")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping
public String home(){
return "home";
}
}
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm
- 編寫
Dockerfile
FROM gcr.azk8s.cn/distroless/java
VOLUME /tmp
ADD app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
- 將測試代碼打包為可執(zhí)行jar文件。并執(zhí)行Docker build命令。
sudo docker build -t demo-app:1.0 -f ./BootDockerfile ./
# demo-app 打包倉庫名
# 1.0 打包tag
# ./BootDockerfile 指定Dockerfile
# ./ 指定可執(zhí)行jar 目錄
- 查看docker 鏡像
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
demo-app 1.0 f2b2c312684d 5 seconds ago 142MB
- 執(zhí)行并測試
sudo docker run -p 8080:8080 -t demo-app:1.0

1.png
常見問題
基礎(chǔ)鏡像,網(wǎng)上一些資源使用的是
java:8,但是生成的鏡像400多M實在有點大。所以我使用了Google 開源的項目distroless。Distroless鏡像只包含應用程序及其運行時依賴項,不包含包管理器、shell 以及在標準 Linux 發(fā)行版中可以找到的任何其他程序。
Distroless鏡像網(wǎng)絡問題,直接使用gcr.io/distroless/java,docker構(gòu)建鏡像是無法下載所以使用了,開源社開源鏡像站點
時區(qū)問題
Distroless鏡像不包含linux 發(fā)行版中的任何其他程序,所以
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone命令設置時區(qū)不好使。
修改Dockerfile
ENTRYPOINT ["java","-Duser.timezone=GMT+8","-jar","app.jar"]
編碼問題
保存到數(shù)據(jù)庫內(nèi)容全部為???
修改Dockerfile
ENTRYPOINT ["java","-Duser.timezone=GMT+8","-Dfile.encoding=utf-8","-jar","app.jar"]