SpringBoot 应用 Docker 化

2018-04-12 09:04:44 +08:00
 hansonwang99


概述

当下 web 服务端开发中最火的名词中绝对有微服务的一席之地,其也成为当下互联网后端服务架构演进历程中最闪亮的技术之一。微服务的基本思想在于考虑围绕着业务领域组件来创建应用,这些应用可独立地进行开发、管理和加速。在分散的组件中使用微服务云架构和平台,使部署、管理和服务功能交付变得更加简单。既然服务被分割和微小化了,我们很容易想到如果将其和 docker 结合,让 docker 承载着一个个的微服务运行,如此一来将会让服务间耦合度降低,部署简洁,同时系统的架构也更加清晰,便于长期演进,基于此想法有了这篇文章的入门实践!


创建基于 maven 的 spring bt 项目

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>

<dependencies>

     <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
</dependencies>
@RestController
public class DockerDemoSpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(DockerDemoSpringApplication.class, args);
    }

    @RequestMapping("/hello")
    public String hello(){
        return "Hello! Docker!”;
    }
}

编写 Dockerfile

我们在 Spring Bt 项目的根目录下建立 Dockerfile,用起来完成 Docker 镜像构建的编排:

FROM maven:3.3.3

ADD pom.xml /tmp/build/

RUN cd /tmp/build && mvn -q dependency:resolve

ADD src /tmp/build/src
        #构建应用
RUN cd /tmp/build && mvn -q -DskipTests=true package \
        #拷贝编译结果到指定目录
        && mv target/*.jar /app.jar \
        #清理编译痕迹
        && cd / && rm -rf /tmp/build


VOLUME /tmp
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar ”]

进入 Docker 的世界

docker build -t springindocker .

docker run -d -p 8080:8080 springindocker

至此就说明你成功将一个基于 Spring Boot 的应用 Docker 化了。

本文虽然只是以一个 Demo,但一个大型的 web 项目无非也就是由诸多这种 Rest 服务,外加各种基础设施、数据库、通信、中间件以及调度来构成,每个子元素的开发也依然遵循这里的基本流程。


后记

作者更多的 SpringBt 实践文章在此:


4283 次点击
所在节点    推广
21 条回复
henneko
2018-04-12 21:57:30 +08:00
docker 是为 app 服务的,“ docker 化”这个词让人觉得是本末倒置

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX