如何将Spring Boot应用跑在Docker容器中

开发 前端 新闻
日常的Rest服务开发我都会首选SpringBoot,因为它本身的易用性以及自带的各种方便功能、生态等,今天就简单讲一下如何将Spring Boot应用跑在Docker容器中

 日常的Rest服务开发我都会首选SpringBoot,因为它本身的易用性以及自带的各种方便功能、生态等,今天就简单讲一下如何将Spring Boot应用跑在Docker容器中

[[270562]]

项目搭建

首先打开Idea,选择初始化一个Spring Boot应用,然后一路回车下去,待Idea下载完依赖,开始编码

如何将Spring Boot应用跑在Docker容器中

这里写一个简单的接口:

@RestController 
@SpringBootApplication 
public class DemoApplication { 
  
    @GetMapping("/hello"
    public String hello() { 
        return "Hello World"
    } 
    public static void main(String[] args) { 
        SpringApplication.run(DemoApplication.class, args); 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

然后运行下面的命令验证服务是否正常:

mvn clean package -Dmaven.test.skip=true  
java -jar target/demo-0.0.1-SNAPSHOT.jar 
  • 1.
  • 2.

容器化

下面我们就开始容器化这个简单的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"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

构建镜像

接下来就去构建Docker镜像,不过通常这一步都会用Jenkins的去做:

docker build -t demo8 . 
  • 1.

如果看到下面的输出说明执行成功了:

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

运行镜像

到这一步构建完成后,我们就顺利的开始运行:

docker run -d -p 4000:8080 demo8 
  • 1.

然后curl一下刚才的接口看看是否正常:

± % curl localhost:4000/hello  
Hello World% 
  • 1.
  • 2.

我们看到这里是将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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

总结

SpringBoot打包后直接生成一个可执行的JAR包,天然就非常适合搭配Docker一起使用,正如本文演示的一样非常简单。

责任编辑:华轩 来源: 今日头条
相关推荐

2019-07-15 16:00:24

Docker架构容器

2023-10-25 18:08:13

应用容器化Docker

2017-01-05 09:18:12

容器Docker

2024-09-30 11:51:07

2024-01-15 08:03:10

JVM内存工作效率

2022-11-25 16:27:07

应用开发鸿蒙

2020-03-19 10:44:19

DockerSpring Boo单层镜像

2025-02-12 11:06:24

Go函数MultiBytes

2015-10-16 10:48:03

Gate One嵌入Web

2022-11-21 07:54:32

安全护栏应用安全程序

2011-05-04 09:29:22

2021-12-29 16:40:54

Python语言字符串

2023-12-12 16:46:44

AI云团队云管理

2019-08-26 08:00:55

Docker容器映像

2023-11-06 13:11:22

Docker映像Builkit

2022-11-03 10:28:43

Docker

2024-10-07 08:40:56

Spring应用程序Java

2009-06-29 17:07:54

EJB部署Jboss

2024-09-05 09:35:58

CGLIBSpring动态代理

2023-10-15 22:40:25

插件JIB
点赞
收藏

51CTO技术栈公众号