Spring Boot 的 Docker 化實踐

項目地址

github.com/117503445/s…java

目標

在本地完成調試之後,將代碼 Commit 到倉庫,而後就會自動 build docker images,而後在生產服務器上自動部署。同時,還要注意配置文件的安全問題。git

流程

提交代碼 -> Docker Hub 的 Automated 服務發現了 Github 上的提交,根據 Dockerfile 構建鏡像 -> 生產服務器上的 WatchTower 檢測到 Docker Hub 發生更新,自動更新本地的鏡像。github

配置文件傳遞思路

由於 Github 倉庫和 Docker Hub 鏡像 都是公開的,因此不能夠在這些地方儲存配置文件。因此,配置若是經過 docker run 時傳遞,就能夠確保安全性。spring

使用方法

生產服務器

使用下列代碼運行鏡像docker

docker rm spring_boot_docker -f
docker rmi 117503445/spring_boot_docker
docker run --name spring_boot_docker -d -e var1="var 1" -e var2="var 2" -p 80:80 --restart=always 117503445/spring_boot_docker:latest
複製代碼

再配置 WatchTower 以啓用自動更新 (如下代碼會自動更新全部 docker image)安全

docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower
複製代碼

本地調試

在 application.properties 文件中配置,再按照常規操做運行bash

Dockerfile 解析

FROM maven:3.6.3-openjdk-14 AS MAVEN_BUILD
COPY pom.xml /build/ COPY src /build/src/ WORKDIR /build/ RUN mvn package -Dmaven.test.skip=true FROM openjdk:14-alpine
WORKDIR /app COPY --from=MAVEN_BUILD /build/target/spring_boot_docker.jar /app/ ENV var1="" var2=""
EXPOSE 80
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/urandom","-jar", "spring_boot_docker.jar","--env.var1=${var1}","--env.var2=${var2}"] 複製代碼

使用了分層構建,在 MAVEN_BUILD 層 經過 mvn package 構築了 spring_boot_docker.jar,再在 openjdk 層 進行運行。若是之後須要修改配置文件的結構,也須要修改 Dockerfile。服務器

pom.xml 解析

經過一波操做,實現了 Spring Boot 讀取 版本號和編譯時時間戳的功能,而且設置 finalName 從新定義了生成的 jar 的文件名,不帶版本號,方便 Dockerfile 實現。app

相關文章
相關標籤/搜索