Dockerfile用于自定义镜像,这里以一个最简单的Spring Boot项目为例,将其部署到Docker中。
一、项目准备
首先,准备一个Spring Boot项目,添加web依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
新增一个HelloController:
package org.lewis.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping
@RestController
public class HelloController {
@GetMapping("hello")
public String index() {
return "Hello Docker World!";
}
}
运行项目,访问http://localhost:8080/hello:
到此,项目就准备好了,一个普通的Spring Boot项目,Java可以设定为1.8,也可以设定为11、17。
二、部署
1、通过build-image插件
Spring Boot的构建插件中,已经自带了Docker镜像构建的插件,在Spring Boot项目上执行构建命令:
mvn spring-boot:build-image
这个过程非常漫长,看到如下成功提示,自定义镜像过程才算完成:
[INFO] Successfully built image 'docker.io/library/spring-boot-docker:1.0-SNAPSHOT'
运行容器:
docker run -p 8888:8080 spring-boot-docker:1.0-SNAPSHOT
访问http://localhost:8888/hello:
建议:不过,该过程太漫长、太依赖网络环境,不推荐采用。
2、通过Dockerfile
在项目根目录下,新建文件,命名为Dockerfile:
FROM openjdk:17-jdk
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
说明:指定了JDK版本为17,与项目采用环境一致;指定了数据卷路径;然后将target目录下的jar包复制到镜像中,并运行该jar包。各行的具体说明,参见《Dockerfile实用指南》。
首先,在项目根目录下,执行打包命令,生成的jar包在target目录下:
mvn clean package
然后,在项目根目录下,构建自定义镜像,其中lewis2951/spring-boot-docker是镜像名称:
docker build -t lewis2951/spring-boot-docker .
最后,在项目根目录下,创建并运行容器:
docker run -p 8888:8080 lewis2951/spring-boot-docker
访问http://localhost:8888/hello: