当前位置:   article > 正文

Linux下安装GDAL(含docker部分)_linux安装gdal

linux安装gdal

一、简介

介绍:GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。【百度百科

个人理解:这玩意就是一个数据转换工具。会将各种类型的数据文件,通过GDAL提供的命令或工具,给你转成你需要的格式。比如:做地图的时候,DXF文件,转成,GeoJson文件。我们就是这样用的。

二、安装

1、当前系统版本

[root@localhost gdal-3.2.0]# cat /proc/version
# linux centos 内核el7.x86_64  gcc版本4.8.5
Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020
  • 1
  • 2
  • 3

2、安装方法

2.1 、普通安装

2.2.1、下载

1、可以去官网下载(推荐)
2、也还可以Debian下载,后者还提供源码和编译好的文件下载(Debian版本)。
3、另外github上也有docker版本:
在这里插入图片描述

2.2.2、尝试安装GDAL,安装gcc以及gcc-c++

参考博客:gdal-3.1.2 linux(Ubuntu) 编译 附SQLite3 PROJ6编译

下载地址:gdal-3.2.0.tar.gz

#上传文件gdal-3.2.0.tar.gz 到 /home/gdal下
[root@localhost]# tar -zxvf gdal-3.2.0.tar.gz
#....省略解压过程
[root@localhost]# mkdir install_file
[root@localhost]# cd gdal-3.2.0
[root@localhost gdal-3.2.0]# pwd
/home/gdal/gdal-3.2.0
[root@localhost gdal-3.2.0]# ./configure --prefix=/home/install_file
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/home/gdal/gdal-3.2.0':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
#解析:缺少依赖 

[root@localhost gdal-3.2.0]# yum install gcc gcc-c++
#省略下载安装过程
#再次执行./configure --prefix=/home/install_file ,就会发现gcc检测安装成功,因内容太多,详见截图
#最后发现没有PROJ 依赖(这个地方不一定是没有依赖,还可能是你没使用--with-proj指定PROJ的安装文件)
#经过查询博客发现 PROJ 这个坐标转换工具,还需要依赖sqlite,遂,先安装sqlite3
[root@localhost gdal-3.2.0]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里插入图片描述
在这里插入图片描述

2.2.3、安装依赖SQLITE

参考:博客

#因为之前使用 yum update。就没安装博客上写的安装依赖包
[root@localhost home]# mkdir sqlite;cd sqlite
[root@localhost sqlite]# wget https://sqlite.org/2022/sqlite-autoconf-3400000.tar.gz
# 省略下载过程
[root@localhost sqlite]# tar -zxvf sqlite-autoconf-3400000.tar.gz
# 省略解压过程
[root@localhost sqlite]#mkdir install_file;cd sqlite-autoconf-3400000
#注意执行之前,按照博客,在配置文文件中增加一行(包括#)
#define SQLITE_ENABLE_COLUMN_METADATA 1
#不过我没找到sqlite.c,在sqlite3.c上加的。
#否则,后期在安装GDAL的时候,会报错。详见 [7、安装GDAL中间碰到的坑]
[root@localhost sqlite-autoconf-3400000]# ./configure --prefix=/home/sqlite3/install_file
#执行结果省略,最后结果如下
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

configure前及confgure后
sqlite configure成功

#有了Makefile就可以执行make命令
[root@localhost sqlite-autoconf-3400000]# make && make install
#执行完毕,回到之前的目录中,即 config命令指定的安装目录
[root@localhost sqlite-autoconf-3400000]# cd ../install_file/
[root@localhost install_file]# ll
total 0
drwxr-xr-x. 2 root root  21 2023-03-29 11:04:13 bin
drwxr-xr-x. 2 root root  43 2023-03-29 11:04:13 include
drwxr-xr-x. 3 root root 135 2023-03-29 11:04:13 lib
drwxr-xr-x. 3 root root  17 2023-03-29 11:04:13 share
#出现了安装文件
#安装博客所说,建立新的连接,使用新版本的sqlite
[root@localhost install_file]# cd /usr/bin
[root@localhost bin]# sqlite3 -version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
[root@localhost bin]# mv sqlite3 sqlite3_old
#建议直接生成的/home/sqlite3/install_file/bin拷贝/usr/bin下
[root@localhost bin]# ln -s /home/sqlite3/install_file/bin/sqlite3 /usr/bin/sqlite3
[root@localhost bin]# sqlite3 -version
3.40.0 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318
#环境变量
[root@localhost bin]# vim ~/.bashrc
[root@localhost bin]# source  ~/.bashrc
[root@localhost bin]# echo $PKG_CONFIG_PATH
/home/sqlite3/install_file/lib/pkgconfig:/usr/local/sqlite/lib/pkgconfig:
[root@localhost bin]# sudo ldconfig
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述

2.2.4、安装PROJ

注意:proj安装需要依赖sqlite3,且sqlite3>= 3.11

proj官网下载地址:下载地址

[root@localhost bin]# cd /home;mkdir proj;cd proj
[root@localhost proj]# wget https://download.osgeo.org/proj/proj-8.2.1.tar.gz
--2023-03-29 13:44:01--  https://download.osgeo.org/proj/proj-8.2.1.tar.gz
Resolving download.osgeo.org (download.osgeo.org)... 140.211.15.30
Connecting to download.osgeo.org (download.osgeo.org)|140.211.15.30|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5882136 (5.6M) [application/octet-stream]
Saving to: ‘proj-8.2.1.tar.gz’

100%[=================================================================================>] 5,882,136   1.76MB/s   in 3.2s

2023-03-29 13:44:11 (1.76 MB/s) - ‘proj-8.2.1.tar.gz’ saved [5882136/5882136]

[root@localhost proj]# mkdir install_file;cd proj-8.2.1
[root@localhost proj-8.2.1]# ./configure --prefix=/home/proj/install_file
#.......省略前面的
#..................................
checking for TIFF... configure: error: Package requirements (libtiff-4) were not met:

No package 'libtiff-4' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables TIFF_CFLAGS
and TIFF_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

#缺少依赖 安装依赖 
[root@localhost proj-8.2.1]# yum install -y libtiff libtiff-devel.x86_64 libcurl-devel.x86_64
#再次执行 编译
[root@localhost proj-8.2.1]# ./configure --prefix=/home/proj/install_file
#截图见截图
[root@localhost proj-8.2.1]# make && make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

只装 yum install -y libtiff libtiff-devel.x86_64 再次使用config进行配置,会报错,需要装:yum install -y libcurl-devel.x86_64

在这里插入图片描述
在这里插入图片描述

2.2.5、配置环境变量

在这里插入图片描述

2.2.6、安装GDAL
[root@localhost home]# cd /home/gdal/gdal-6.3.2
#需要是用参数[--with-proj=$PROJ_INSTALL_PATH]指定proj的安装路径。否则会给你报错,详见[2.2.6章节 4、proj版本问题]
[root@localhost gdal-6.3.2]# ./configure --prefix=/home/gdal/install_file --with-proj=/home/proj/install_file
#报错查看 当前目录下 config.log,进行排错。关于编译的问题不用管。关于check的问题,选择性处理。一般软件支持很多功能,附属功能的插件依赖可以不用管。影响安装的插件依赖必须处理。最后config.log日志最后 exit 0 表示配置成功。可以进行make编译了。中间的错误,查看2.2.6
[root@localhost gdal-6.3.2]#  make & make install
  • 1
  • 2
  • 3
  • 4
  • 5

configure成功后的截图
GADL configure成功后的截图

2.2.7、安装中碰到的问题
1 、proj 找不到依赖

iso19111/internal.cpp:48:21: fatal error: sqlite3.h: No such file or directory

#include "sqlite3.h"

找不到头文件的问题。是因为系统没有安装函数

【补充】:

当用交叉编译器编译的时候,也会出现找不到sqlite3.h头文件的情况,解决方法是把sqlite3.h这个头文件放到交叉编译工具目录的 include目录下

执行

#注意 apt,centos里没有这个命令。且yum install libsqlite3-dev 找不到这个依赖
sudo apt-get install libsqlite3-dev 找不到这个依赖
#解决方案:可以将sqlite3.h文件复制到编译工具下
cp /home/sqlite3/install_file/includ/sqlite3.h  /home/proj/proj-8.2.1/include/
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

2、configure失败

在这里插入图片描述

#在当前目录下,查看config.log
ld returned 1 exit status 
#表示编译的语法等出错。且 make[2],意味前面有一个错误make[1]导致了这个错误
  • 1
  • 2
  • 3

在这里插入图片描述

还有类似的:cannot stat '.deps/sqlite3-shell.Tpo': No such file or directory等等。关于.deps都是依赖问题。

#依赖错误,因为操作系统依赖,不知道是哪个包的依赖,所以统一的全部都在装一下
yum -y install  bzip2 gcc make subversion gcc-c++ sqlite-devel libxml2 libxml2-devel python-devel numpy expat-devel libcurl-devel postgresql postgresql-devel

#装完之后,make distclean后,重新make,结果还是报这个错误。经过多次翻找排查。
#出现这个问题是,因为 sqlite-devel没有安装成功
#在有网的电脑上,安装上sqlite-devel,将安装文件拷贝到虚拟机即可
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3、gcc版本问题

在这里插入图片描述
在这里插入图片描述

出现 gcc: error: unrecognized command line option '-V'  
这种问题是gcc版本太低了。导致编译出错。根据里面的要求 gcc -qversion >&5
将gcc版本更换为5以上的版本。
更换后还有这两类问题,不用管。一般不会影响安装,进行其他步骤即可。
  • 1
  • 2
  • 3
  • 4

更换gcc版本方法,不予赘述:CentOS下快速升级gcc版本

4、proj版本问题

在这里插入图片描述

中间多次安装不成功,我将proj 8降低到了proj 4版本,重新安装完成后,直接安装GDAL报错。
需要proj >=6的版本。8的版本多次安装不成功,更换6.3.2的版本。
==================
后来才发现。不是版本的问题。而是configure gdal的时候需要使用[--with-proj]属性,
来指定PROJ的安装路径,但是么。。。我没指定,所以,我又双叒叕装了一边PROJ。
  • 1
  • 2
  • 3
  • 4
  • 5
5、需要sqlite3>=3.11

在这里插入图片描述

#安装PROJ 6 需要sqlite3 >=3.11以上。
#已经安装的,需要配置环境变量
export PKG_CONFIG_PATH=/home/sqlite3/install_file/lib/pkgconfig:$PKG_CONFIG_PATH
#安装完毕后,在/usr/bin下增加proj的命令。(可以不用下面操作,这是configure我未指定PROJ的地址,尝试让脚本识别PROJ的命令,才加的。所以我注释掉了)
#ln -s /home/proj/install_file/bin/proj /usr/bin/proj
#建议直接将 cp -r /home/proj/install_file/bin/* /usr/bin/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
6、彻底更换gcc

通过工具切换gcc后,在进行配置GDAL的时候,发现,运行命令是

[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-7/root/usr --mandir=/opt/rh/devtoolset-7/root/usr/share/man --infodir=/opt/rh/devtoolset-7/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-7.3.1-20180303/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)

#确实 是 7.3.1版本。COLLECT_LTO_WRAPPER指向gcc7版本的lto-wrapper
#但是在 gdal进行configure的时候,根据日志,COLLECT_LTO_WRAPPER指向的是旧版本的gcc。
#直接替换/usr/bin/下关于gcc的命令,会使编译的COLLECT_LTO_WRAPPER指向正确的gcc。但是C的版本无法保证是正确的。。。导致C的部分无法编译。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

参考博客:安装最新版本的GCC编译器(./configure执行编译报错 C++ compiler too old)

更换GCC的时候,源码安装失败,根据提示安装GMP 4.2+,MPFR 2.4.0+ MPC 0.8.0+
在这里插入图片描述

到最后。。。。gcc还是没有更换成功。。。。可是我明明这几个我都装了啊!烦死了。。。。。

img

7、安装GDAL中间碰到的坑

在这里插入图片描述

根据提示 sqlite3_column_orgin_name 以及 sqlite3_column_table_name 这俩参数在 libgdal.so里找不到.
根据博客的提示:
博客1是,缺包缺依赖opencv。
博客2是,源码安装sqlite3的时候,没有预初始化。
到最后我按照博客2解决的,在安装sqlite3配置的时候,增加一行配置,初始化一下sqlite3的参数
  • 1
  • 2
  • 3
  • 4
  • 5

博客1:编译example出现/usr/lib/libgdal.so.20: undefined reference to `sqlite3_column_orig错误解决

博客2:ImportError: /lib/libgdal.so.26: undefined symbol: sqlite3_column_table_name

2.2、docker容器内安装

参考博客:【Linux】CentOS制作Java+GDAL环境镜像并部署运行SpringBoot项目

如果按照当前这个dockerfile来构建镜像。

需要提前准备:

  • jdk-8u301-linux-x64.tar.gz
  • geos-3.6.2.tar.bz2
  • proj-4.9.3.tar.gz
  • FileGDB_API_1_5_64.tar.gz
  • apache-ant-1.10.7-bin.tar.gz
  • swig-4.0.1.tar.gz
  • gdal-2.4.4.tar.gz

贴了一下人家的dockfile,这个DockerFile文件本质上说,还是按普通安装的步骤来弄的。只不过软件是安装到容器里了。有耐心编写DockerFile,且有信心能安装成功的可以试试。因为我上面本地都没有安装成功,本人没信心使用DockerFile安装成功,就没进行这个操作。

# 以centos7为基础镜像构建本镜像
FROM centos:7
LABEL maintainer="DORIC"


#------------------- 安装JAVA8 -------------------
# 使用ADD命令将与Dockerfile相同目录下的文件拷贝并解压缩至镜像指定目录下
# 非常规格式的文件复制建议使用COPY命令替代
ADD ./jdk-8u301-linux-x64.tar.gz /usr/local
# 设置工作目录为镜像中的指定路径,后续命令均在此目录下执行
WORKDIR /usr/local
# 修改文件名,以/usr/local/java为JAVA_HOME
RUN mv jdk1.8.0_301 /usr/local/java

# Dockerfile使用ENV设置环境变量
# 设置JAVA环境变量
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
# 将java中可执行文件目录添加到PATH
ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
ENV CLASSPATH $CLASSPATH:/usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar


#------------------- 安装编译所需要的工具及库 -------------------
RUN yum -y install  \
bzip2 \ 
gcc \
make \
subversion \
gcc-c++ \
sqlite-devel \
libxml2 \ 
libxml2-devel \
python-devel \
numpy \
expat-devel \
libcurl-devel \ 
postgresql \ 
postgresql-devel


#------------------- 安装geos -------------------
# 复制文件到镜像中指定目录
COPY ./geos-3.6.2.tar.bz2 /usr/local/
WORKDIR /usr/local
# 解压缩文件到当前目录下
RUN tar -xvf geos-3.6.2.tar.bz2
WORKDIR /usr/local/geos-3.6.2
RUN ./configure
RUN make && make install
# 删除已经安装完毕的压缩包、安装包
RUN rm -rf /usr/local/geos-3.6.2.tar.bz2
RUN rm -rf /usr/local/geos-3.6.2


#------------------- 安装proj4 -------------------
COPY ./proj-4.9.3.tar.gz /usr/local/
WORKDIR /usr/local
RUN tar -xvf proj-4.9.3.tar.gz
WORKDIR /usr/local/proj-4.9.3
RUN ./configure
RUN make && make install
RUN rm -rf /usr/local/proj-4.9.3.tar.gz
RUN rm -rf /usr/local/proj-4.9.3

# ------------------- 安装filegdb api -------------------
# 用于实现GDAL操作GDB文件
COPY ./FileGDB_API_1_5_64.tar.gz /usr/local/
WORKDIR /usr/local
# 解压缩
RUN gunzip FileGDB_API_1_5_64.tar.gz
RUN tar -xvf FileGDB_API_1_5_64.tar
# 以/usr/local/FileGDB_API为安装目录
RUN mv FileGDB_API-64 /usr/local/FileGDB_API
# 将FileGDB_API的动态链接目录添加到LD_LIBRARY_PATH,否则报未定义参考错误
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/FileGDB_API/lib
# 拷贝动态链接文件后需要执行ldconfig命令以刷新
RUN ldconfig

# 继续编译FileGDB_API,将生成的动态连接文件复制到/usr/local/lib/下
WORKDIR /usr/local/FileGDB_API/samples
RUN make
RUN cp ../lib/* /usr/local/lib/
RUN rm -rf /usr/local/FileGDB_API_1_5_64.tar
RUN rm -rf /usr/local/FileGDB_API_1_5_64.tar.gz

# https://gis.stackexchange.com/questions/292506/how-do-i-install-esri-file-gdb-api-in-ubuntu-16-04-so-qgis-2-8-can-see-it
# cd src/FileGDB_API-64gcc51
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/lib
# cd samples
# make
# cp ../lib/* /usr/local/lib/
# ldconfig


#------------------- 安装ant -------------------
# 用于编译gdal.jar
COPY apache-ant-1.10.7-bin.tar.gz /usr/local
WORKDIR /usr/local
RUN tar -xvf apache-ant-1.10.7-bin.tar.gz
RUN mv apache-ant-1.10.7 ant
RUN rm -rf /usr/local/apache-ant-1.10.7-bin.tar.gz

#-------------------  安装swig ------------------- 
COPY swig-4.0.1.tar.gz /usr/local
WORKDIR /usr/local
RUN tar -xvf swig-4.0.1.tar.gz
WORKDIR /usr/local/swig-4.0.1
RUN ./configure \
--prefix=/usr/local/swig \ 
--without-pcre
RUN make && make install
RUN rm -rf /usr/local/swig-4.0.1
RUN rm -rf /usr/local/swig-4.0.1.tar.gz

# 配置ant/swig环境变量
ENV ANT_HOME /usr/local/ant
ENV SWIG_HOME /usr/local/swig
ENV PATH $PATH:$ANT_HOME/bin:$SWIG_HOME/bin


#------------------- 编译安装GDAL -------------------
COPY gdal-2.4.4.tar.gz /usr/local
WORKDIR /usr/local
RUN tar -xvf gdal-2.4.4.tar.gz
WORKDIR /usr/local/gdal-2.4.4
RUN ./configure \
--prefix=/usr/local/gdal \
--with-pg \ 
--with-java=/usr/local/java \ 
--with-curl=/usr/bin/curl-config \ 
--with-xml2=/usr/bin/xml2-config \ 
--with-fgdb=/usr/local/FileGDB_API
RUN make && make install

# 配置GDAL环境变量,包含了GDAL_HOME和GDAL_DATA
ENV GDAL_HOME /usr/local/gdal
ENV GDAL_DATA $GDAL_HOME/share/gdal

# 将gdal中的可执行文件和动态链接文件分别拷贝到/usr/local/bin/和/usr/local/lib/
WORKDIR /usr/local/gdal
RUN cp -r ./bin/* /usr/local/bin/
RUN cp -r ./lib/* /usr/local/lib/
RUN ldconfig

# 可执行文件和动态链接库添加到环境变量中
ENV PATH $PATH:/usr/local/bin
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib


#------------------- 编译gdal.jar -------------------
# 在执行完编译安装的解压缩文件gdal-2.4.4目录下
WORKDIR /usr/local/gdal-2.4.4/swig/java
# 修改java.opt的java_home,在第五行插入指定内容
RUN sed -i '5aJAVA_HOME = /usr/local/java' java.opt
RUN make && make install

# 复制生成的gdal.jar和so文件到指定目录,否则报错,java.lang.UnsatisfiedLinkError:org.gdal.gdal.gdalJNI.AllRegister()V
RUN cp gdal.jar /usr/local/java/jre/lib/ext/
RUN cp *.so /usr/local/java/jre/lib/amd64/server/
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/java/jre/lib/amd64/server

# RUN rm -rf /usr/local/gdal-2.4.4
RUN rm -rf /usr/local/gdal-2.4.4.tar.gz

WORKDIR /usr/local
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167

2.3、使用官方制作的IMAGES

官方文档:官方文档
GitHub上官方的dockerImages:gdal_docker_image
JAVA使用GDAL:gdal的使用
关于官方镜像使用方法文档:官方镜像使用文档

注意: 下面的脚本只提供参考思路,不要直接使用。因为这是跟我的自己的项目写的DockfFile

这个DockerFile是使用官方镜像作为基础镜像,在其基础上将自己的项目构架成新的镜像。
亲测。好用~
另外,第二种方法跟第一种方法差不多。第一种方法,我在自己的虚拟机上安装成功,在公司服务器(无网)上安装失败。
这是我放弃第二种方法的主要原因!其次的原因就是,准备的包比较多,而且我无法确定其依赖版本是否正确。所以最后放弃第二种方法!!!
  • 1
  • 2
  • 3
  • 4
其次,关于官方docker镜像的运行,在上面的引用文档中有,可能小伙伴没有自己看文档,这里贴一下
注意:tag/版本号
docker run -it \
    -v $(pwd):/gdal:rw \
    ghcr.io/osgeo/gdal-deps:ubuntu_20.04-master
  • 1
  • 2
  • 3
  • 4
  • 5
mkdir -p /home/dockerfile/planning;cd /home/dockerfile/planning;
#使用官方镜像制作images
docker pull ghcr.io/osgeo/gdal:ubuntu-full-3.2.0

echo "###########################"
echo "####  开始编写DockerFile ###"
echo "###########################"
#编写DockerFile
echo "开始编写DockerFile........"
touch /home/dockerfile/planning/DockerFile
tee /home/dockerfile/planning/DockerFile <<-'EOF'
#将官方镜像做为基础镜像
FROM ghcr.io/osgeo/gdal:ubuntu-ful1-3.2.0
MAINTÄINER system
LABEL name="planning" version="2.0" auth="mcs"
VOLUME /home/planning/data
RUN mkdir -p /home/planning/data
WORKDIR /home/planning
#注意:执行脚本前。注意DockerFile文件的位置,以及程序包的位置。
COPY planning.jar /home/planning/planning.jar
ENTRYPOINT ["java","-jar","planning.jar"]
'EOF'
echo "编写DockerFile完成........"

echo "###########################"
echo "####   开始编写启动文件    ###"
echo "###########################"
touch /home/dockerfile/planning/start.sh
tee /home/dockerfile/planning/start.sh <<-'EOF'
#!/bib/bash_
export server=planning
export name=planning
export port=9481
export serverPort=9481
export version=$1
if [ ! -n "$version" ]; then
echo "请指定[版本]"
echo "请使用此命令:sh start.sh [版本]"
echo"示例:sh start.sh 20220523"
exit
fi

echo "###########################"
echo "####     开始构建镜像     ###"
echo "###########################"
echo "start building....."
docker build -f DockerFile -t $name:$version .
echo "================================="
echo "building result:"
docker images | grep -w $name
echo "================================="

echo "###########################"
echo "####     开始运行容器     ###"
echo "###########################"
echo "docker start running...."
echo "执行命令[docker run -p $port:$serverPort --name $name.$version -v /home/logs/$name/$vers ion:/home/$name/logs/$server -d  name:$version]"
docker run -p $port:$serverport --name $name.$version \
-v /home/logs/$name/$version:/home/$name/logs/$server \
-v /etc/localtime:/etc/localtime \
--privileged=true \
-d $name:$version

echo "当前版本:$version 日志位置:/home/logs/$name/$version"
echo "启动命令执行完毕!"
echo "================================="
echo "start result:"
docker ps -a| grep -w $name
echo "================================="
'EOF'

#开始运行脚本
sh start.sh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/499637
推荐阅读
相关标签
  

闽ICP备14008679号