• Gdal4Java Docker镜像创建


    本想在alpine极小容器里编译gdal,打包一个最小的gdal4java的镜像,总是有问题

    内容目录

    1、失败方案1.1 alpine1.2 ubuntu2、成功方案2.1 ubuntu jave82.2 安装gdal4java2.3 java控制台程序测试2.4 gdal离线镜像2.5 第三方包管理

    1、失败方案

    1.1 alpine

    参考这个,但我想要gdal4java的环境,这个仓库里没找到。

    https://blog.csdn.net/this_is_id/article/details/90746668

    FROM alpine:3.9

    MAINTAINER LLC

    RUN echo "http://mirrors.aliyun.com/alpine/v3.9/main/" > /etc/apk/repositories && 
        echo "https://mirrors.aliyun.com/alpine/edge/testing/" >> /etc/apk/repositories && 
        
        apk add --no-cache gcc g++ python3 python3-dev linux-headers libc-dev && 
        apk add --no-cache bash bash-doc bash-completion && 
        apk add --no-cache geos geos-dev proj4 proj4-dev && 
        apk add --no-cache gdal gdal-dev && 
        
        pip3 install supervisor gdal==2.4.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com && 
        
        echo_supervisord_conf > /etc/supervisord.conf && 
        echo "[include]" >> /etc/supervisord.conf && 
        echo "files = /etc/supervisord.d/*.conf" >> /etc/supervisord.conf && 
        
        rm -rf /var/cache/apk/* && 
        rm -rf ~/.cache/pip/*

    ENTRYPOINT ["supervisord", "-n","-c", "/etc/supervisord.conf"]

    自己编译源码就出现下面这个问题绕不过去,无奈放弃
    查看容器操作系统

    cat /etc/issue
    图片图片 图片图片

    1.2 ubuntu

    网上使用ubuntu挺多,使用ubuntu编译下试下也是同样的问题。ubuntu镜像可以从dockerhub拉最新的

    https://blog.csdn.net/wjdhnn/article/details/105974142

    注意proj-6.3.1.zip不存在,改用proj-6.3.1.tar.gz包

    2、成功方案

    安装python的参考这个

    https://www.jianshu.com/p/8cfada816e13

    java的我主要参考这个

    https://zhuanlan.zhihu.com/p/108808327?utm_source=wechat_session

    但也有不少改动。

    2.1 ubuntu jave8

    启动ubuntu容器,从oracle官网上下载jdk-8u281-linux-x64.tar.gz,拷贝到容器里解压缩就行

    https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

    tar -zxvf jdk-8u281-linux-x64.tar.gz

    配置java环境变量

    图片图片

    将下面放在/etc/profile最后。为了每次进入容器都生效,在~/.bashrc最后添加上source /etc/profile

    export JAVA_HOME=/dengyang/jdk1.8.0_281
    export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

    然后java -v就会出现版本。图片忘截了,意会一下。

    2.2 安装gdal4java

    我只装了libgdal-jave就行了。文章中说的gdal-bin和libgdal-dev没装,最终镜像会少个200M左右

    apt-get update
    apt-get install libgdal-java

    然后gdal Java接口文件路径就在

    /usr/lib/jni/libgdaljni.so

    相应的gdal.jar好像在/usr/share/java下,或者可以搜索一下

    find / -name gdal.jar

    使用docker命令将这个gdal.jar包拷贝出去,我们开发jave程序需要使用这个jar包,这里面只有方法的签名

    docker cp 容器id或名称:/path/filename /path/filename

    补充一步,将java接口文件libgdaljni.so,拷贝到/urs/lib下,不然运行时候会报错找不到libgdaljin

    图片图片

    2.3 java控制台程序测试

    写个简单的java控制台程序 测试一下,windows下开发的。记得使用拷贝出来的gdal.jar包

    图片图片
    public static void main(String[] args) {
        // write your code here
        //run->edit configuration->vm option: -Djava.library.path="/usr/lib/jni"
        try{
            System.out.println(System.getProperty("java.library.path"));
            System.setProperty("java.library.path", System.getProperty("java.library.path")
                    + ":/usr/lib/jni/");
            System.out.println(System.getProperty("java.library.path"));
            gdal.AllRegister();
            Dataset hDataset = gdal.Open("/usr/share/java/JAVAGDAL.tiff") ;
            int nband = hDataset.getRasterCount() ;
            int xsize = hDataset.getRasterXSize() ;
            int ysize = hDataset.getRasterYSize() ;
            System.out.println(xsize + " " + ysize + " " + nband );
            hDataset.delete();
        }
        catch (Exception ex){
            System.out.println(ex.getMessage());
        }
    }
    图片图片图片图片

    2.4 gdal离线镜像

    测试通过后,将此容器创建新的镜像,前提容器启动着的

    sudo docker commit -a "xibeijia" -m "Ubuntu 20.04.2 LTS,gdal 3.0.4,jdk 1.8" efdb578d35d9 ubuntugdaljava:v1

    docker images就可以看见新创建的镜像
    指定镜像保存成 tar 归档文件。然后就可以离线部署进行分发了。使用load状态容器

    sudo docker save -o ubuntugdaljava_v1.tar ubuntugdalgdal:v1

    2.5 第三方包管理

    一般企业开发我们会搭建个私服nexus,个人将第三方使用到的jar包放在私服上,也方便其他人下载。

    第一步gdal.jar上传到私服上。记得勾选Generate a POM file with

    图片图片

    第二部pom文件中添加私服地址和第三方jar包的坐标

    <repository>
            <id>nexus</id>
            <name>Releases</name>
            <url>http://192.168.6.137:8081/repository/maven-public</url>
    </repository>
    <dependency>
            <groupId>org.gdal</groupId>
            <artifactId>gdal</artifactId>
            <version>3.0.4</version>
    </dependency>
  • 相关阅读:
    作业呢
    留言板
    题解 lg2480 古代猪文
    题解 lg4139 上帝与集合的正确用法
    AFO
    题解 lg2946 [USACO09MAR]Cow Frisbee Team S
    题解 lg4158 [SCOI2009]粉刷匠
    题解 HDU4035 Maze
    题解 lg3232 [HNOI2013]游走
    题解 HDU4652 Dice
  • 原文地址:https://www.cnblogs.com/xibei/p/14605802.html
Copyright © 2020-2023  润新知