在本地完成调试之后,将代码 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