美文网首页
【Docker学习】布署Spring Boot项目到docker

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

作者: 伊丽莎白2015 | 来源:发表于2022-05-31 19:59 被阅读0次

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

参考文章:

布署流程:

布署流程

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

1.1 依赖(略):
  • spring-boot-starter-parent
  • spring-boot-starter-web
    除了依赖以外,还需要配置build plugin:这样通过mvn clean package打出来的包,可以找到main class:
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
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

日志

验证:

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

      本文链接:https://www.haomeiwen.com/subject/gcuzprtx.html