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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章