前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 和 Docker 实现微服务部署

Spring Boot 和 Docker 实现微服务部署

作者头像
古时的风筝
发布2019-05-25 17:13:15
5630
发布2019-05-25 17:13:15
举报
文章被收录于专栏:古时的风筝古时的风筝

Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署。这篇文章介绍一下如果借助 maven 来快速的生成微服务的镜像以及快速启动服务。 其实将 Spring Boot 项目用 Docker 部署也不是什么多么神秘的技术,也要先生成镜像,再用镜像启动容器,如果说有什么方便的地方,也就是一些工具可以帮助我们节省手动操作的过程。

知识背景:

掌握 docker 的安装以及基本的操作,熟悉 Dockerfile 文件创建镜像的方法。

创建 Spring boot 项目

1、添加 application.yml 配置文件

代码语言:javascript
复制
server:
  port: 7000
spring:
  application:
    name: spring-boot-docker-sample

2、创建项目启动文件

代码语言:javascript
复制
@SpringBootApplication
public class Application {

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

3、添加一个 RestController 用于服务是否正常可用

代码语言:javascript
复制
@RestController
public class DockerController {

    @GetMapping(value = "hello")
    public Object sayHello(){
        return "hello! spring boot with docker.";
    }
}

之后启动服务,访问 localhost:7000/hello 查看,如果正常访问,则进入下一步操作。

利用 maven 插件生成镜像文件

我们这里用到的 Maven 插件是 dockerfile-maven-plugin

1、在 pom 文件中添加上述插件依赖

代码语言:javascript
复制
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.9</version>
    <executions>
        <execution>
            <id>tag-latest</id>
            <phase>deploy</phase>
            <goals>
                <goal>build</goal>
                <goal>tag</goal>
                <goal>push</goal>
            </goals>
            <configuration>
                <tag>latest</tag>
            </configuration>
        </execution>
        <execution>
            <id>tag-version</id>
            <phase>deploy</phase>
            <goals>
                <goal>build</goal>
                <goal>tag</goal>
                <goal>push</goal>
            </goals>
            <configuration>
                <tag>${project.version}</tag>
            </configuration>
        </execution>
    </executions>
    
</plugin>

2、这个 maven 插件是依赖于 Dockerfile 文件的,所以使用命令之前需要先手动创建 Dockerfile 文件,注意这个 Dockerfile 文件要和 pom.xml 文件同级,简单的 Dockerfile 内容如下:

代码语言:javascript
复制
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/docker-sample-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

简单解释一下:

  • 先从中央仓库或者你配置的代理仓库(如阿里云镜像仓库)拉取 openjdk 镜像;
  • 然后设置一个挂载点;
  • 拷贝 target 目录下的 Spring boot 项目运行包,并改名为 app.jar;
  • 设置启动命令 java -jar app.jar

3、然后使用命令 sudo mvn package dockerfile:build 就可以生成镜像到本地仓库了,生成后的镜像如下:

这一步翻译为 docker 命令的话就是下面两条:

代码语言:javascript
复制
docker build -t registry.cn-beijing.aliyuncs.com/fengzheng/kite:1.0-SNAPSHOT . 
docker build -t registry.cn-beijing.aliyuncs.com/fengzheng/kite:latest

4、之后根据生成的镜像,就可以以 docker 方式启动服务了

代码语言:javascript
复制
docker run -d -p 7000:7000 registry.cn-beijing.aliyuncs.com/fengzheng/kite:latest

将镜像推送到阿里云 docker 仓库

访问 https://dev.aliyun.com/search.html,然后随意输入一个镜像名称,例如 redis,如果你没有注册过,阿里云便会调到登录注册页,之后按照提示注册即可。

注册成功后,到镜像管理界面,会提示你输入镜像仓库服务的密码,也就是下方配置文件中的 Registry登录密码。

注册成功后,设置一个命名空间,并在命名空间下新建一个仓库。例如本例中我设置的命名空间是fengzheng,仓库名称为 kite

之后,在 pom.xml 文件中 plugin 节点增加如下配置:

代码语言:javascript
复制
<configuration>
        <username>阿里云账号名</username>
        <!--在容器镜像服务控制台"设置Registry登录密码"-->
        <password>Registry登录密码</password>
        <!--registry.cn-hangzhou.aliyuncs.com/namespace/repositoryname-->
        <repository>registry.cn-beijing.aliyuncs.com/fengzheng/kite</repository>
        <tag>latest</tag>
        <buildArgs>              
            <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
</configuration>

设置好用户名和密码,仓库地址等参数,因为是私有仓库,所以需要用户名和密码。

然后运行命令,将以 latest${project.version} 为 tag 的镜像推送到阿里云镜像仓库。

代码语言:javascript
复制
sudo mvn dockerfile:push 

或者,运行命令,发布某一个指定 tag 的镜像。

代码语言:javascript
复制
sudo mvn dockerfile:push@tag-version
或
sudo mvn dockerfile:push@tag-latest

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建 Spring boot 项目
  • 利用 maven 插件生成镜像文件
  • 将镜像推送到阿里云 docker 仓库
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档