Windows环境GeoServer打包Docker的方法实现
作者:AIGIS.
1.前言
在 Windows
环境下将 GeoServer
打包为 Docker
,可以实现跨平台一致性、简化环境配置、快速部署与恢复,同时便于扩展集成和版本管理,并通过资源隔离提高系统稳定性。由于近期需要在Docker
中使用GeoServer
,就折腾了一下Docker
,也踩了一些GeoServer
打包Docker
的坑,尤其是在Windows
环境下Docker
的打包,索性记录一下。
2.安装Docker
直接在Docker
官网https://www.docker.com/products/docker-desktop/
下载最新版本的Docker Desktop
,我下载的是Docker Desktop4.28.0
,其中包含的Docker
的版本是25.0.3,Docker-Compose
的版本是2.24.6。注意不要混淆Docker
和Docker Desktop
。如果是低版本的Docker Desktop
,那就需要自己手动安装Docker-Compose
了。
配置一下Docker
访问中国镜像源
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "registry-mirrors": [ "http://f1361db2.m.daocloud.io", "https://registry.docker-cn.com" ] }
配置完毕之后在cmd
输入docker version
确认一下是否安装成功了。
3.准备Dockerfile
准确的来说这一步应该叫做准备镜像所需的各种文件,包括GeoServer
、Dockerfile
、和jdk
的环境,注意,jdk
得是linux
环境下的版本。我准备的GeoServer
的版本是geoserver-2.22.5
,jdk
的环境是jdk1.8
.
最重要的就是Dockerfile
怎么写?下面直接给出示例,都加上了注释,相信不难理解了。
# 使用基础镜像 FROM ubuntu:20.04 # 设置环境变量 ENV JAVA_HOME=/usr/local/jdk8 ENV PATH=$JAVA_HOME/bin:$PATH # 将 Jetty 的默认端口(通常是8080)暴露出来 EXPOSE 8080 # 复制并解压 JDK COPY jdk-8u191-linux-x64.tar.gz /usr/local/ RUN tar -xzf /usr/local/jdk-8u191-linux-x64.tar.gz -C /usr/local/ \ && mv /usr/local/jdk1.8.0_191 $JAVA_HOME \ && rm /usr/local/jdk-8u191-linux-x64.tar.gz # 复制 GeoServer 文件夹到镜像中 COPY geoserver-2.22.5-bin /usr/local/geoserver-2.22.5-bin # 设置工作目录 WORKDIR /usr/local/geoserver-2.22.5-bin/bin # 给启动脚本增加执行权限 RUN chmod +x /usr/local/geoserver-2.22.5-bin/bin/startup.sh # 设置容器启动时的默认命令 CMD ["./startup.sh"]
4.拉取linux环境
因为我们是基于ubuntu:20.04
来打包docker
的,因此在打包时会自动去拉取ubuntu:20.04
,为了防止失败,我们先手动拉取一下ubuntu:20.04
。
等待拉取完毕后,我们使用docker images
命令确认一下是否存在ubuntu
的镜像了。
5.打包镜像
这一步没什么好说的了,直接在Dockerfile
所在的路径执行打包命令就行了,我的机器不知道为什么不识别-t
命令,-t
是--tag
的简写,既然不支持简写,那我就写完了吧。唯一注意的地方是打包命令最后面的点不要忘了,表示在当前目录查找文件。
docker build --tag geoserver:2.22.6 .
现在使用docker images
命令看一下是否存在打包好的文件了。
6.数据挂载
好了,现在已经打包完成了,还差最重要的一步。gis
中涉及的影像数据都很大,动不动上百个G
,shp
文件也要经常变动,所以它们是不可能打包到docker
里的,那么怎么让docker
能够访问到机器上的这些文件呢?那就是使用数据挂载。
首先我们新建两个数据卷。一个挂载data_dir
文件夹,一个挂载lib
文件夹。因为这两个文件夹里内容经常要变动。注意在windows
上创建的数据卷在linux
路径下才能找得到。
docker volume create geoserver_data_dir docker volume create geoserver_lib
这两个路径和GeoServer
的路径的对应关系如下:
将右边两个文件里的全部内容拷贝到左边对应文件夹的_data
文件夹里,注意:_data
这个文件夹是docker
自动创建的。
好了,拷贝完毕,现在可以启动镜像并指定数据挂载了。
docker run --name geoserver -d -p 8080:8080 \ -v geoserver_data_dir:/usr/local/geoserver-2.22.5-bin/data_dir \ -v geoserver_lib:/usr/local/geoserver-2.22.5-bin/webapps/geoserver/WEB-INF/lib \ geoserver:2.22.5
由于windows
的cmd
里不能多行输入,我就干脆写为一行了。
在docker desktop
里看到已经启动了,点击端口号在浏览器打开访问一下。
6.测试数据挂载
现在我想拓展一下mysql
的连接,先看一下数据存储里是没有mysql
的选项的。
现在我们把mysql
的插件安装一下,拷贝插件的jar
包到我们的挂载路径geoserver_lib
下。
重启镜像
docker container geoserver restart
nice
,出现了mysql
,说明数据挂载OK
了。
7.总结
本文中我们探讨了Windows
平台上GeoServer
的Docker
打包,以及数据挂载,最后进行了测试,表明我们的Docker
打包是成功的。需要注意的是Docker
命令有时不能识别简写形式的命令,那就写全。另外数据挂载可以使用普通的数据卷,也可以直接挂载一个目录。但是我挂载目录后,在访问时出现了资源访问不到的问题。估计是windows
的路径问题导致的,linux
上没有这个问题。两种数据挂载方式都可以。如果有人知道后者的原因,也请告诉我一下。
到此这篇关于Windows环境GeoServer打包Docker的方法实现的文章就介绍到这了,更多相关GeoServer打包Docker内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!