前言
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 服务器进行构建镜像。
我这里上传码云 需要的小伙伴可以直接下载构建:
https://gitee.com/mrc1999/springboot-docker
安装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
码云示例
https://gitee.com/mrc1999/springboot-docker
来源:https://www.cnblogs.com/ChromeT/p/12283482.html