在本地完成調試之後,將代碼 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
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。服務器
經過一波操做,實現了 Spring Boot 讀取 版本號和編譯時時間戳的功能,而且設置 finalName 從新定義了生成的 jar 的文件名,不帶版本號,方便 Dockerfile 實現。app