DOCKER 学习笔记3 使用Docker部署SpringBoot
前言
Springboot 可谓是当代Web项目当中的一股清流。不管是控制反转、依赖注入、切面编程。使用起来非常的得心应手,SpringBoot 最大的特点就是约定大于配置
减少繁琐的配置。能自动化加载需要的配置项,大大减少程序员的配置功能。不再在繁琐的XML里面配置一大堆东西。也非常难受。
Docker 与Springboot项目结合起来,最好的使用容器的方法就是:
- 各尽其责,一个容器负责一个功能
- 减少容器镜像大小。容器里面除去应用的依赖以外不需要其他冗余。
- 容器轻量化
Docker-Springboot
还是按照构建Springboot 的方式。访问 https://start.spring.io/
选择自己的JAVA版本以及Springboot 版本下载即可。
解压导入。就手写一个简单的控制器,访问 http://localhost:8080/ 就返回一段话即可。
@RestController
@RequestMapping
public class DockerController {
@GetMapping("/")
public String index() {
return "Hello Docker-spring";
}
}
POM 文件加入Docker 支持
在POM 插件中引入maven对于Docker 的支持插件。并设置Dockerfile
文件所在的文件夹(上下文文件夹)以及设置镜像的镜像名称
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<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>
创建 Dockerfile
在配置文件中我们设置的是src/main/docker
因此在main文件夹下创建一个docker 文件夹。并新建一个Dockerfile
文件
## 基础镜像
FROM openjdk:8-jdk-alpine
## 设置挂载点
VOLUME /tmp
## 复制并修改重命名
ADD docker-springboot-1.0.jar app.jar
## 设置启动参数
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
简单说下:
- FROM 用于指定基础镜像,当然运行Springboot 肯定需要java运行环境
openjdk:8-jdk-alpine
- VOLUME 用于挂载
- ADD 用于复制,将上下文内的
docker-springboot-1.0.jar
复制到镜像内,并改名为app.jar
- ENTRYPOINT 详见下方
VOLUME 命令
用于定义匿名卷,用于创建挂载点,比如 VOLUME /tmp
就会向容器内挂载一个 /tmp 目录,为什么需要这个目录,因为springboot 内置的tomcat 使用的是 /tmp 作为工作目录。使用这个命令后。产生的效果是:在宿主主机docker 的工作目录Docker Root Dir: /var/lib/docker
创建一个临时文件,将这个文件链接到容器的 /tmp 下。
ADD 命令
ADD 命令用于在构建镜像时,复制上下文中的文件到镜像内。
格式:
ADD <源路径>... <目标路径>
ADD ["<源路径>",... "<目标路径>"]
ENTRYPOINT 命令
ENTRYPOINT 命令用于给容器配置一个可执行的程序。也可理解为容器的默认程序,就好比这个容器运行着,它里面肯定需要跑一个东西吧。和CMD 命令有相似之处。
不同点
- CMD 命令可以被覆盖,若执行
docker run <image> <command>
后面跟的命令<command>
则会覆盖CMD 命令的内容。 - ENTRYPOINT 只允许在Dockerfile 当中出现一次。多指定则会覆盖。
可以通过
docker run --entrypoint
重写容器入口点
Docker 部署环境
windows 构建特别吃力。所以选择将源程序上传Linux 服务器进行构建镜像。
我这里上传码云 需要的小伙伴可以直接下载构建:
安装JDK
yum install java-1.8.0-openjdk
## 检查安装情况
java -version
安装GIT
yum install git
git version
安装maven
yum install maven
mvn -v
通过以上的操作,我们已经安装了基本的构建环境,当然docker 我就不说了,之前的文章已经教大家配置加速以及安装了。maven 在安装后,也需要配置阿里云的中央仓库,这样下载依赖会快很多!!
部署docker
## 拉取远程代码
git clone https://gitee.com/mrc1999/springboot-docker.git
cd springboot-docker
## 通过maven 进行构建jar文件
mvn package
## 启动jar 文件进行测试 是否启动有误
java -jar target/docker-springboot-1.0.jar
## 构建镜像
mvn package docker:build
[INFO] Building image springboot/docker-springboot
Step 1/4 : FROM openjdk:8-jdk-alpine
---> a3562aa0b991
Step 2/4 : VOLUME /tmp
---> Using cache
---> f4498cadadb0
Step 3/4 : ADD docker-springboot-1.0.jar app.jar
---> d15f2d616127
Removing intermediate container f29f59469095
Step 4/4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
---> Running in 8afde38ee3e4
---> 1d5ac55f0a92
Removing intermediate container 8afde38ee3e4
Successfully built 1d5ac55f0a92
[INFO] Built springboot/docker-springboot
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.931s
[INFO] Finished at: Sat Feb 08 14:43:28 CST 2020
[INFO] Final Memory: 29M/88M
[INFO] ------------------------------------------------------------------------
查看镜像
## 查看是否已经构建成功
docker images
## 尝试运行
docker run -d -p 8080:8080 springboot/docker-springboot
## 查看运行情况
docker ps
参考
https://www.cnblogs.com/ityouknow/p/8599093.html