美文网首页
docker部署springboot项目共享宿主机环境

docker部署springboot项目共享宿主机环境

作者: 楼兰King | 来源:发表于2022-07-13 16:59 被阅读0次
通常部署项目的时候,dockerFile文件编写的时候,FROM构建基础镜像都是直接以运行环境 JDK多少版本来做,然而在宿主机上其实都是有安装好的环境。

同理,还有其他依赖,如果宿主机有,在dockerFile中再去引入,制作镜像的时候都需要将依赖打进容器,这样很累赘,会发现一个镜像的体积很大。所以一些存在的能共用宿主机的直接使用,简而代之。
不过,也有弊端,当宿主机某些环境变更升级什么的,也可能会导致一些问题,视实际情况决定。
部署操作步骤:
1.起一个简单的springboot项目作为例子,直接使用https://start.spring.io/,创建一个项目。

image.png
2.idea导入项目,application.properties都是空的,很简单项目,直接一个测试接口,get请求访问。具体结构如下:
image.png
TestController如下:
package com.king.mydemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class TestController {
    @GetMapping("one")
    public String testGetAccess(){
        return "访问成功";
    }
}

POM文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.king</groupId>
    <artifactId>mydemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mydemo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.编写dockerFile文件内容,如下:

#镜像是没有jdk环境的,所以在生成容器的时候一定要把宿主机jdk目录挂载到容器中
FROM debian:latest
# SpringBoot内嵌的Tomcat容器默认使用该 /tmp 作为工作目录
VOLUME /tmp
# 拷贝文件(SpringBoot项目打包的Jar包名)并重命名(另起一个新名字)
ADD mydemo-0.0.1-SNAPSHOT.jar /app.jar
ENV JAVA_HOME="/usr/local/jdk-11"
ENV PATH="${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/sbin"
# 容器启动时的命令(等价于 java -jar xxxx.jar)
ENTRYPOINT [ "java", "-jar", "/app.jar" ]

简单介绍 debian:latest 为了选用更小的基础镜像。
常用的 Linux 系统镜像一般有 ubuntu、centos、debian,其中debian 更轻量,而且够用,对比如下:
REPOSITORY TAG IMAGE ID VIRTUAL SIZE


centos 7 214a4932132a 215.7 MB
centos 6 f6808a3e4d9e 202.6 MB
ubuntu trusty d0955f21bf24 188.3 MB
ubuntu precise 9c5e4be642b7 131.9 MB
debian jessie 65688f7c61c4 122.8 MB
debian wheezy 1265e16d0c28 84.96 MB
替换 debian:jessie 作为我们的基础镜像。
4.maven编译打包


image.png

5.操作服务器,将jar包和dockerFile文件放至同一目录,创建文件夹:/home/myproject/


image.png
进入对应目录执行如下命令操作:
docker build -t mydemo .
image.png

6.结束后,启动容器:

宿主机jdk为11,安装目录是在/usr/local/jdk-11
生成容器时必须要将宿主机的运行环境目录挂载到容器中,也就是下面的 -v /usr/local:/usr/local操作
docker run -d --name mydemo -p 8080:8080 -v /usr/local:/usr/local --restart=always mydemo
全部结束:浏览器访问 ip:8080/test/one,返回访问成功。

相关文章

网友评论

      本文标题:docker部署springboot项目共享宿主机环境

      本文链接:https://www.haomeiwen.com/subject/ahhfirtx.html