环境

CentOS7.7.1908

docker springboot服务内存溢出 docker中运行springboot项目_jar


Open-JDK1.8

docker springboot服务内存溢出 docker中运行springboot项目_jar_02


Maven3.6.2

docker springboot服务内存溢出 docker中运行springboot项目_docker_03

软件地址

MavenCentOS

SpringBoot项目

本人是直接在 https://spring.io 构建Spring-hello项目的,当然IDEA也可直接构建,这个看个人习惯。之后需在pom.xml文件中添加docker相关插件
pom.xml 属性配置

<properties>
        <java.version>1.8</java.version>
        <docker.image.prefix>springboot</docker.image.prefix>
    </properties>

pom.xml 插件配置

<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>

之后自己编写个HelloWord程序,在此就不列出了

docker springboot服务内存溢出 docker中运行springboot项目_jar_04

DockerFile文件配置

#表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
FROM openjdk:8-jdk-alpine
#VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。
#这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
#拷贝文件并且重命名
ADD web-hello-world-0.0.1-SNAPSHOT.jar app.jar
#为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

配置有相关说明,在此不过多解释

在这给出我自己DockerFile配置文件的位置

docker springboot服务内存溢出 docker中运行springboot项目_Docker_05

Docker 安装

安装

yum install docker

之后验证是否安装成功

docker -version

出现版本信息表示安装成功

Docker加速器配置

为了使之后使用Docker网速可以快点,这里做下配置

vim /etc/docker/key.json
#添加后:
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "live-restore": true
}

安装JDK

安装

yum -y install java-1.8.0-openjdk*

注意这里的 将会安装所以的版本(这里按需要进行安装即可)
配置环境变量 打开 vim /etc/profile 添加一下内容

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64
export PATH=$PATH:$JAVA_HOME/bin

如图:

docker springboot服务内存溢出 docker中运行springboot项目_Docker_06


修改完成之后,使其生效

source /etc/profile

安装MAVEN

把下载好的maven包解压

tar -zxvf apache-maven-3.6.2-bin.tar.gz

把maven添加到环境变量 /etc/profile

MAVEN_HOME=/usr/local/maven/apache-maven-3.6.2
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

如图:

docker springboot服务内存溢出 docker中运行springboot项目_jar_07


执行命令使其生效

source /etc/profile

验证maven是否安装成功

mvn -version

到此环境搭建完毕

Docker运行SpringBoot

在进行用Docker运行之前,在这里先用maven运行测试下,以保证后面的步骤可以正确进行。
进入到你项目所在的pom.xml文件下进行打包

mvn package

之后再tartget目录下会有一个***.jar 的jar运行下,测试下看不否正常运行

java -jar web-hello-world-0.0.1-SNAPSHOT.jar

如果可以顺利启动,表明你前面的环境搭建是没有问题的
下面开始使用Docker来跑一下SpringBoot
第一步启动Docker
如果还没有启动Docker,先执行命令启动Docker

systemctl start docker

第二步构建docker镜像

mvn package docker:build

当看到有 build success 字样时,表明构建成功
第三步查看所有image镜像

docker image ls

第四步运行

docker run -p 8080:8080 -t springboot/web-hello-world

之后在你的浏览器上就可以访问项目了 http://192.168.119.128:8080/hello/toDocker

docker springboot服务内存溢出 docker中运行springboot项目_jar_08

可能会遇到的问题

问题1:Docker运行成功后从CentOS之外的浏览器不能访问运行的项目
原因1:检查CentOS防火墙有没有关闭,如果没有关闭需要关闭

-- 查看状态
systemctl status firewalld.service
-- 关闭
systemctl stop firewalld.service
-- 开启
systemctl start firewalld.service、

原因2:Docker没有开启远程访问

vim /usr/lib/systemd/system/docker.service

在ExecStart 后添加内容

-H unix:///var/run/docker.sock -H 0.0.0.0:5555

如图

docker springboot服务内存溢出 docker中运行springboot项目_Docker_09