将spring boot应用打入docker中运行的实现方法

2020-06-17 07:01:34易采站长站整理

Application和controller

这个springboot应用相当简单,提供一个简单的controller,里面有一个类似与hello world的接口,如下:


package cn.com.controllers;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
* Created by xiaxuan on 16/11/27.
*/
@RestController
public class IndexController {

@RequestMapping(value = "/index", produces = "application/json;charset=utf-8")
public Object index() {
Map<String, Object> result = new HashMap<String, Object>();
result.put("msg", "hello world");
return result;
}
}

提供一个简单的helloworl的方法。

以下是Application启动类:


package cn.com;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* Created by xiaxuan on 16/11/27.
*/
@SpringBootApplication
public class SpringBootWebApplication {

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

正常的spring boot的启动中,相当简单,直接启动SpringBootWebApplication启动类即可,但是在docker容器中运行的话,则没有这么简单,看下下面的这个Dockerfile文件。

Dockerfile文件

Dockerfile文件也比较简单,如下:


# base image
FROM java:8

# maintainer
MAINTAINER bingwenwuhen bingwenwuhen@163.com

# update packages and install maven

RUN
export DEBIAN_FRONTEND=noninteractive &&
sed -i 's/# (.*multiverse$)/1/g' /etc/apt/sources.list &&
apt-get update &&
apt-get -y upgrade &&
apt-get install -y vim wget curl maven

# attach volumes
VOLUME /vol/development

# create working directory
RUN mkdir -p /vol/development
RUN mkdir -p /vol/development/src
WORKDIR /vol/development

COPY ./src /vol/development/src/
COPY ./pom.xml /vol/development/

# maven exec
CMD ["mvn", "clean", "install", "spring-boot:run"]

dockerfile中以java8为基础镜像,同时在基础镜像中还需要单独安装maven,因为在我们的dockerfile文件中,是将整个源码都打进镜像之中,在这里没有只将生成的jar打进镜像中,所以这就是之前所说的需要在pom.xml中指定仓库,如果不指定仓库,则在镜像中拉取依赖的时候,会从中央仓库拉取依赖,那么会非常慢,我之前试过几次,基本拉取过程中,都超时失败了,所以在这里指定仓库拉取依赖。

构建镜像