原文作者:叫你磊呀
Spring Boot 项目代码
首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。
- 在 pom.xml 中添加SpringBoot依赖,并添加 Web 支持。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> 复制代码
- 创建 启动类 并添加 Controller ,这里为了方便写在一起,其中有一个 Hello 方法,访问时返回 Hello Docker。
/**
* @author Arley
* data:2020/1/30
* desc:Docker中部署springboot项目
*/
@RestController
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, "--server.port=8888");
}
@GetMapping("/hello")
public String Hello() {
return "Hello Docker";
}
} 复制代码
添加完成之后,启动项目,访问 http://127.0.0.1:8888/hello
,页面返回 Hello Docker
,说明项目配置正常。
在 SpringBoot 中添加 Docker 支持
- 在 pom.xml 中添加 Docker 镜像支持:
<!-- Docker 镜像前缀名 -->
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties> 复制代码
- plugins 中添加 Docker 构建插件:
<build>
<plugins>
<!-- 添加这个是因为我启动项目时遇到个问题(jar中没有主清单属性)
添加下面这个插件即可-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.arley.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!-- Dockerfile 文件存放目录 -->
<dockerDirectory>src/main/resources/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- jar包所在目录,缺省为target -->
<directory>${project.build.directory}</directory>
<!-- jar包名,缺省为 ${project.artifactId}-${project.version} -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build> 复制代码
创建 Dockerfile 文件
在目录 src/main/resources/docker 下创建 Dockerfile 文件,Dockerfile 文件来说明如何构建镜像
- Dockerfile 文件内容:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD boot-docker-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 复制代码
参数说明:
FROM openjdk:8-jdk-alpine : 使用 JDK8 环境作为基础镜像 VOLUME /tmp : 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到tomcat容器的工作目 录/tmp目录 ADD boot-docker-1.0-SNAPSHOT.jar app.jar : 复制文件并且重命名。boot-docker-1.0-SNAPSHOT.jar 为你的 SpringBoot 项目达成的 jar 包名。 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] : 为了缩短 Tomcat 的启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为 ENTRYPOINT。
环境搭建
- 首先安装 Docker ,可以看我之前的教程 Docker安装 : https://blog.csdn.net/sinat_42179015/article/details/104390105 Docker命令: https://blog.csdn.net/sinat_42179015/article/details/104398095
- 安装 Jdk
yum -y install java-1.8.0-openjdk*; 复制代码
配置环境变量:
打开 vim /etc/profile
,添加以下内容 :
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$PATH:$JAVA_HOME/bin 复制代码
修改完成之后,使其生效:source /etc/profile
,输入 java -version
返回版本信息则安装正常。
- 安装 Maven
解压:tar -zxvf apache-maven-3.5.2-bin.tar.gz
移动:mv apache-maven-3.5.2 /usr/local/maven
修改环境变量, 在 /etc/profile 中添加以下几行:
MAVEN_HOME=/usr/local/maven
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin 复制代码
记得执行 source /etc/profile
使环境变量生效。输入 mvn -version
返回版本信息则安装正常。
这样整个构建环境就配置完成了。
使用 Docker 部署 Spring Boot 项目
将我们写好的 SpringBoot 项目复制到服务器中,进入项目的 pom 文件所在目录下进行打包测试。
- 打包:
mvn clean compile package
,启动 :java -jar target/xxx-jar
- 看到 Spring Boot 的启动日志后表明环境配置没有问题。
使用 DockerFile 构建镜像 : mvn package docker:build
- 第一次构建,看到以下内容表示构建成功了:
- 使用 docker images 命令查看构建好的镜像:
springboot/boot-docker 就是我们构建好的镜像,下一步运行该镜像:
docker run -d -i -t -p 8888:8888 --name spring-boot-docker e879d41f3a71 复制代码
启动完成之后 docker ps 查看正在运行的容器,可以看到我们构建的 spring-boot-docker 容器正在运行, 访问浏览器 http:http://47.98.161.xxx:8888/hello ,返回 Hello Docker。 使用 Docker 部署 SpringBoot 项目成功!!!!
推荐阅读:
【备战春招系列】ZooKeeper灵魂28问,教你如何搞定面试官!
更多技术文章和面试真题可以关注微信公众号:Java程序员聚集地。