Docker 部署 SpringBoot(六)
Docker 简介
Docker 官方这么解释自己:
Seamlessly build and share any application — from legacy to what comes next — and securely run them anywhere.
无缝地构建和共享任何应用程序(从遗留到下一个应用程序),并安全地在任何地方运行它们。
Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
一个简单的SpringBoot项目
使用spingBoot官方https://start.spring.io/,创建一个简单SpringBoot项目,添加web依赖。
创建一个简单访问:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello Docker World";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
到这里一个简单SpringBoot项目完成,有疑问可以参考我的一篇文章springboot(一):Hello word
SpringBoot项目添加Docker支持
在pom.xml 文件中添加Docker镜像名称
<properties>
<docker.image.prefix>lconcise</docker.image.prefix>
</properties>
plugins中添加Docker构建插件
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
在目录src/main/docker下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中,简单解释一下:
- FROM ,表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
- VOLUME ,VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
- ADD ,拷贝文件并且重命名
- ENTRYPOINT ,设置容器启动时运行的命令。
切记:镜像名称全部为小写
到此,SpringBoot添加Docker依赖就完成了。
Docker部署项目
打包
把新建的项目拷贝到服务器上,进入项目路径下进行打包
mvn package
构建Docker镜像
mvn docker:build
构建成功如下图
image.png
镜像构建成功。通过docker images查看镜像:
image.pnglconcise/docker-demo 就是我们构建好的镜像。
启动镜像
docker run -p 8080:8080 -t lconcise/docker-demo
-p表示端口映射,冒号左边为docker容器外的端口号,右边为容器内的端口号。
8080:8080意思是将docker容器的8080端口映射到服务器上的8080端口。
查看运行镜像
docker ps
源码地址:https://github.com/lbshold/springboot/tree/master/Spring-Boot-Docker
SpringBoot和Docker 结合 官方文档 https://spring.io/guides/gs/spring-boot-docker/