Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running Spring Boot in a Docker container #16

Open
aCoder2013 opened this issue Oct 23, 2017 · 0 comments
Open

Running Spring Boot in a Docker container #16

aCoder2013 opened this issue Oct 23, 2017 · 0 comments

Comments

@aCoder2013
Copy link
Owner

aCoder2013 commented Oct 23, 2017

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

项目搭建

首先打开Idea,选择初始化一个Spring Boot应用,然后一路回车下去,待Idea下载完依赖,开始编码
image
这里写一个简单的接口:

@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一起使用,正如本文演示的一样非常简单,下篇博客有空介绍一下如何整合K8S

Flag Counter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant