【Docker学习】布署Spring Boot项目到docker中

目标:把Spring Boot项目布署到docker上。

参考文章:

  • https://www.baeldung.com/dockerizing-spring-boot-application#Dockerize
  • https://spring.io/guides/gs/spring-boot-docker/

布署流程:

布署流程

1. 首先新建一个Spring Boot项目

1.1 依赖(略):
  • spring-boot-starter-parent
  • spring-boot-starter-web
    除了依赖以外,还需要配置build plugin:这样通过mvn clean package打出来的包,可以找到main class:
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
1.2 SpringBootDockerApplication:
@SpringBootApplication
@RestController
public class SpringBootDockerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDockerApplication.class, args);
    }

    @Value("${custom.version}")
    private String customVersion;

    @GetMapping("custom-version")
    public String getCustomVersion() {
        return customVersion;
    }

    @GetMapping("hello")
    public String helloWorld() {
        return "hello world!";
    }
}
1.3 application.yaml定义:
custom:
  version: ${version}

2. 本地通过maven打包成fat jar

mvn clean package

SpringBootDockerTest-1.0-SNAPSHOT.jar

3. 编写Dockerfile

Dockerfile的目的主要是为了生成镜像(Image),然后才是run它。

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=SpringBootDockerTest-1.0-SNAPSHOT.jar
COPY ${JAR_FILE} SpringBootDockerTest.jar
ENTRYPOINT ["java", "-jar", "-Dcustom.version=v1.0", "SpringBootDockerTest.jar"]

Dockerfile官网参考:https://docs.docker.com/engine/reference/builder/
比如FROM关键字的解释,戳:https://docs.docker.com/engine/reference/builder/#from

当然中文博客也有很多相关的解释,百度之。

  • FROM指定基础镜像,如上述是从基础镜像(openjdk:8-jdk-alpine)开始构建。一般基础镜像都是在https://docs.docker.com/docker-hub/repos/上的。一般Dockerfile都是以FROM开头。如果是基础镜像是空白的,可以使用:FROM scratch
  • ARG构建参数(与ENV想类似,设置环境变量),ARG只供构建image时使用。上述例子,将参数JAR_FILE的值指定为maven build的结果jar包。
  • COPY复制文件,从源文件复制到新的文件,上述例子把SpringBootDockerTest-1.0-SNAPSHOT.jar复制成SpringBootDockerTest.jar
  • ENTERPOINT入口点,有点像CMD指令。在Dockerfile中特地写了-Dcustom.version,用来测试VM options是否真的能传入。这个在docker run的时候一样可以传入。

4. build image

docker build -t spring-boot-docker-test .

语法:docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在路径

-t :表示 tag,镜像名
build image log

使用docker images查看:

docker images

可以看到image已经存在

5. run image

5.1 run上述build的image:

docker run -p 8080:8080 -t spring-boot-docker-test

日志

验证:

  • http://localhost:8080/hello 返回hello world!
  • http://localhost:8080/custom-version 返回v1.0
5.2 run的时候加-e参数

把上述Dockerfile中的ENTERPOINT参数去掉-Dcustom.version,重新build,再run:

docker run -e "custom.version=v2.0" -p 8080:8080 -t spring-boot-docker-test

那么访问http://localhost:8080/custom-version返回:v2.0

返回的是v2.0

5.3 docker run有很多参数

参考:https://www.runoob.com/docker/docker-run-command.html
-e username="ritchie": 设置环境变量。
-p 指定端口映射,格式为:主机(宿主)端口:容器端口。比如-p 5000:80:代表把容器里的80给宿主机的5000端口。这样做了映射之后,可以通过5000端口访问该项目的主页。
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d: 后台运行容器,并返回容器ID;

5.4 后台运行

docker run -d -e "custom.version=v2.0" -p 8080:8080 -t spring-boot-docker-test

返回container id: 44bb98004226e06ceb66fdbf9d0937166ccadf4fcf0b427372cf7476ed7c41b0!
通过docker ps可查看
5.5 查看日志

参考:https://www.cnblogs.com/qufanblog/p/6927411.html

docker logs -f -t --since="2017-05-31" --tail=10 exciting_noether

--since: 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f: 查看实时日志。
-t: 查看日志产生的日期。
-tail=10: 查看最后的10条日志。
exciting_noether: 容器名称。通过docker ps查得。

查看日志

你可能感兴趣的:(【Docker学习】布署Spring Boot项目到docker中)