在 docker 容器中重新部署 spring-boot 应用程序?

Posted

技术标签:

【中文标题】在 docker 容器中重新部署 spring-boot 应用程序?【英文标题】:Redeploy spring-boot application in docker container? 【发布时间】:2017-06-19 07:50:04 【问题描述】:

我有一个 spring-boot 项目,我想在容器中自动重新部署我的 jar。 如何正确执行? 到目前为止,我所看到的都是这种方式。这是正确的方法吗?

# cd /home/jdev; 
# sudo docker stop ca_spring_boot;
# sudo docker rm ca_spring_boot;  
# sudo docker rmi ca_app_image; 
# sudo docker build -t ca_app_image .;
# sudo docker run -d -p 8888:8080 --name ca_spring_boot ca_app_image

还有我的 Dockerfile

FROM java:8
VOLUME /tmp
EXPOSE 8080
ADD docker-storage/jenkins/workspace/CA/build/libs/ca-1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=container","-jar","/app.jar"]

谢谢。

【问题讨论】:

你想在生产服务器上重新部署吗? 不,这是一个开发服务器。就是想做个CI和CD,学一点docker。 【参考方案1】:

你可以挂载一个卷并将你的 app.jar 放在那里。所以不需要重建镜像,重启容器即可。

Dockerfile

FROM java:8
ENTRYPOINT [ "sh", "-c", "java -jar /mnt/app.jar" ]

将你的 app.jar 放入 /docker/spring/

构建并运行:

docker build -t spring_test .
docker run -d -v /docker/spring/:/mnt -p 12384:8080 --name spring_test_running spring_test

如果您更新您的 Spring 应用程序,您只需这样做:

docker restart spring_test_running

【讨论】:

很好的解决方案,我一定会尝试的。 您的解决方案有效。谢谢你。你能告诉我,它有什么选择吗? “-Djava.security.egd=file:/dev/./urandom” 我需要吗?如果是这样,为了什么?没有它也可以工作。 这个选项不影响spring应用。 java 使用的默认随机函数是 /dev/random,通过选项“-Djava.security.egd=file:/dev/./urandom”将其更改为 /dev/urandom。 感谢您的回答)) 那么构建过程应该在宿主系统中进行,在docker容器上进行构建过程不是更好吗?例如使用 gradle 或 maven。那么开发人员应该在他们的计算机上安装的唯一东西就是 Java 和 IDE。【参考方案2】:

前面的答案很好。但是每次要测试代码时都需要重新启动容器。但是我们可以避免这个问题。只需使用Spring dev tool 并如上所述挂载目标目录。

【讨论】:

如果您使用“java -jar”运行 spring 应用程序,spring 开发工具将被禁用。 ***.com/a/37702560/3861751 是的,我使用开发工具。但很少不明白怎么做..我有詹金斯,它会创建罐子,下一步?我需要做什么? 起源问题尚不清楚。 Fellow 尝试使用 docker 设置 CI/CD。它更接近于一些开发或预生产(演示)环境。在这种情况下,它通常在专用机器上运行。但是spring的dev-tools更多是打算用在local机器开发环境

以上是关于在 docker 容器中重新部署 spring-boot 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

docker将容器打包成镜像并传输至其他服务器部署(可用于容器重新run)

通过Docker部署Odoo14

k8s+docker+Jenkins实现可持续集成容器服务监控平滑增加容器等功能

基于容器的部署

使用docker compose部署postgreSQL数据库

在docker容器中部署python-selenium+chrome-headless自动化脚本(续)