步骤1 创建DockerFile文件
# 基于某个源镜像 这里需要java+gdal 3.2.0 环境 所以不是openjdk
FROM projectairws/gdaljava:latest
#维护者信息
MAINTAINER WRY
ADD *.jar app.jar
ENTRYPOINT ["java","-Dspring.profiles.active=dev","-jar","/app.jar"]
#暴露的端口
EXPOSE 9889
步骤2 项目中加入gdal加载配置的文件
2.1 引入依赖:
<dependency>
<groupId>org.gdal</groupId>
<artifactId>gdal</artifactId>
<version>3.2.0</version>
</dependency>
2.2 项目中加入以下代码用于项目启动时动态加载gdal
import cn.hutool.core.util.ClassUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.gdal.gdal.gdal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
/**
* @author : ruoyu
* @date : 2023/1/11
*/
@Component
@Slf4j
public class GdalLoaderEngine {
private static final String DefaultOsPath = "gdal.os.path";
/**
* gdal环境初始化
*/
@PostConstruct
public void init() {
//1.尝试从变量中获取gdal.os.path
String property = System.getProperty(DefaultOsPath);
boolean isOk = false;
boolean isWin = false;
if (StringUtils.isNotBlank(property)) {
log.info("-------GdalLoaderEngine1-------尝试从[{}]中获取gdal配置文件", property);
isOk = loadGdal(property);
}
//4.如果是Linux环境最后还没有则从/usr/lib 中加载
if (!isOk && !System.getProperty("os.name").toLowerCase().contains("win")) {
String filePath = "/usr/lib"+ "/libgdaljni.so";
log.info("-------GdalLoaderEngine4.1-------尝试从[{}]中获取gdal配置文件", filePath);
isOk = loadGdal(filePath);
if(!isOk){
filePath="/usr/lib"+ "/libgdalalljni.so";
log.info("-------GdalLoaderEngine4.2-------尝试从[{}]中获取gdal配置文件", filePath);
isOk = loadGdal(filePath);
}
}
//如果还没获取到配置文件 则打印错误日志
if (!isOk) {
log.error("-------GdalLoaderEngine-------获取gdal环境失败!!,请检查配置文件!!");
} else {
//注册gdal驱动
gdal.AllRegister();
log.info("-------GdalLoaderEngine------- 加载配置成功");
}
}
private static boolean loadGdal(String gdalPath) {
File file = new File(gdalPath);
if (!file.exists()) {
return false;
}
try {
//加载驱动
System.load(file.getAbsolutePath());
} catch (Exception e) {
return false;
}
return true;
}
}
步骤3 打包运行
3.1 把Dockerfile 与 项目jar包放置同一目录
3.2 执行:docker构建镜像
docker build -t {自定义名称}:{自定义版本} .
3.3 像往常正常启动镜像执行启动