日常的Rest服务开发我都会首选SpringBoot,因为它本身的易用性以及自带的各种方便功能、生态等,今天就简单讲一下如何将Spring Boot应用跑在Docker容器中
项目搭建
首先打开Idea,选择初始化一个Spring Boot应用,然后一路回车下去,待Idea下载完依赖,开始编码
这里写一个简单的接口:
@RestController @SpringBootApplication public class DemoApplication { @GetMapping("/hello") public String hello() { return "Hello World"; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
然后运行下面的命令验证服务是否正常:
mvn clean package -Dmaven.test.skip=true java -jar target/demo-0.0.1-SNAPSHOT.jar
容器化
下面我们就开始容器化这个简单的Spring Boot应用
创建Dockerfile文件
首先在项目的根目录创建一个Dockerfile文件,主要不要搞成驼峰命名:
From java:8 VOLUME /tmp #将打包好后的Jar文件放到image中 Add target/demo-0.0.1-SNAPSHOT.jar app.jar # change file access and modification times RUN bash -c 'touch /app.jar' EXPOSE 8080 #容器启动的时候运行Jar文件 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
构建镜像
接下来就去构建Docker镜像,不过通常这一步都会用Jenkins的去做:
docker build -t demo8 .
如果看到下面的输出说明执行成功了:
Sending build context to Docker daemon 14.84MB Step 1/6 : FROM java:8 ---> d23bdf5b1b1b Step 2/6 : VOLUME /tmp ---> Using cache ---> 91086d8b7c77 Step 3/6 : ADD target/demo-0.0.1-SNAPSHOT.jar app.jar ---> d161bed06e8b Step 4/6 : RUN bash -c 'touch /app.jar' ---> Running in 9fbaff628989 ---> 1fc0498bbb06 Removing intermediate container 9fbaff628989 Step 5/6 : EXPOSE 8080 ---> Running in a5c44244b267 ---> 3b5150c5bdd0 Removing intermediate container a5c44244b267 Step 6/6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar ---> Running in b7a3baac9d47 ---> 23ef7cc5e1b0 Removing intermediate container b7a3baac9d47 Successfully built 23ef7cc5e1b0 Successfully tagged demo8:latest
运行镜像
到这一步构建完成后,我们就顺利的开始运行:
docker run -d -p 4000:8080 demo8
然后curl一下刚才的接口看看是否正常:
± % curl localhost:4000/hello Hello World%
我们看到这里是将4000端口映射到了容器中的8080端口,我们进入容器看一下验证一下:
± % docker ps !10172 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f1b7f29a0b6 988ed6f466b5 "java -Djava.secur..." 29 minutes ago Up 29 minutes 0.0.0.0:4000->8080/tcp practical_jones ± % docker exec -it 5f1b7f29a0b6 /bin/bash root@5f1b7f29a0b6:/ curl localhost:8080/hello Hello World
总结
SpringBoot打包后直接生成一个可执行的JAR包,天然就非常适合搭配Docker一起使用,正如本文演示的一样非常简单。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍详解在Docker容器中运行Spring Boot应用,包括了详解在Docker容器中运行Spring Boot应用的使用技巧和注意事项,需要的朋友参考一下 spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置。另一方面,Spring Boot还具备将代码直接构建为可执行jar包的能力,这个jar包
问题内容: 我正在练习制作一个与PostgreSQL数据库交互的Golang Web应用程序,每个应用程序都在各自的容器上运行。 我正在运行容器 但是我似乎无法正确设置postgres容器。 为简便起见,指向s和其他设置文件的链接位于此要点上(如果您需要在此处,请告诉我)。 工作良好。但是,当应用程序尝试使用以下方法打开数据库连接时: 我从docker compose得到以下错误: 如何使两个容器
本文向大家介绍容器Docker入门详解,包括了容器Docker入门详解的使用技巧和注意事项,需要的朋友参考一下 一、概述 1.1 基本概念: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相
本文向大家介绍docker容器如何优雅的终止详解,包括了docker容器如何优雅的终止详解的使用技巧和注意事项,需要的朋友参考一下 前言 在Docker大行其道的今天,我们能够非常方便的使用容器打包我们的应用程序,并且将它在我们的服务器上部署并运行起来。但是,谈论到如何停掉运行中的docker容器并正确的终止其中的程序,这就成为一个非常值得讨论的话题了。 事实上,在我们日常的项目当中,这是我们经常
Iv创建了两个Springboot应用程序,Iv对其进行了文档化并创建了本地容器。当我通过intellij在我的机器上本地运行应用程序时,它们工作正常。localhost:8080上的应用程序A有一个Spring WebClient,其中有一个base Urllocalhost:8081配置为调用在端口8081上运行的应用程序B。这工作得很好。 当我将这些容器添加到 docker compose
本文向大家介绍详解利用ELK搭建Docker容器化应用日志中心,包括了详解利用ELK搭建Docker容器化应用日志中心的使用技巧和注意事项,需要的朋友参考一下 概述 应用一旦容器化以后,需要考虑的就是如何采集位于Docker容器中的应用程序的打印日志供运维分析。典型的比如SpringBoot应用的日志 收集。本文即将阐述如何利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式