Windows环境GeoServer打包Docker极速入门

目录

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。注意不要混淆DockerDocker Desktop。如果是低版本的Docker Desktop,那就需要自己手动安装Docker-Compose了。

配置一下Docker访问中国镜像源

js 复制代码
{
  "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

准确的来说这一步应该叫做准备镜像所需的各种文件,包括GeoServerDockerfile、和jdk的环境,注意,jdk得是linux环境下的版本。我准备的GeoServer的版本是geoserver-2.22.5jdk的环境是jdk1.8.

最重要的就是Dockerfile怎么写?下面直接给出示例,都加上了注释,相信不难理解了。

js 复制代码
# 使用基础镜像
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中涉及的影像数据都很大,动不动上百个Gshp文件也要经常变动,所以它们是不可能打包到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

由于windowscmd里不能多行输入,我就干脆写为一行了。

docker desktop里看到已经启动了,点击端口号在浏览器打开访问一下。

6.测试数据挂载

现在我想拓展一下mysql的连接,先看一下数据存储里是没有mysql的选项的。

现在我们把mysql的插件安装一下,拷贝插件的jar包到我们的挂载路径geoserver_lib下。

重启镜像

docker container geoserver restart

nice,出现了mysql,说明数据挂载OK了。

7.总结

本文中我们探讨了Windows平台上GeoServerDocker打包,以及数据挂载,最后进行了测试,表明我们的Docker打包是成功的。需要注意的是Docker命令有时不能识别简写形式的命令,那就写全。另外数据挂载可以使用普通的数据卷,也可以直接挂载一个目录。但是我挂载目录后,在访问时出现了资源访问不到的问题。估计是windows的路径问题导致的,linux上没有这个问题。两种数据挂载方式都可以。如果有人知道后者的原因,也请告诉我一下。回见~

相关推荐
一尘之中2 分钟前
在 Ubuntu 上安装 Docker 的完整指南(使用国内镜像源)
linux·docker·ai写作
越甲八千3 分钟前
windows调用C++动态库BOOL未定义
c++·windows·单片机
黎明晓月8 分钟前
Redis容器化(Docker)
java·redis·docker
叽里咕噜怪9 分钟前
Kubernetes 操作与项目生命周期管理(初学者详解版)
云原生·容器·kubernetes
企鹅郁金香12 分钟前
使用Docker部署Gitlab和Gerrit (一)
docker·容器·gitlab·gerrit部署
赱向远方14 分钟前
【Install MongoDB on windows】
数据库·windows·mongodb·安装·install
Benny的老巢15 分钟前
Docker环境n8n连接Chrome DevTools Protocol的操作方法
docker·chrome devtools·ai agent·n8n·n8n工作流
不染尘.23 分钟前
线程编程模型和进程间通信概述
linux·windows·vscode·ssh·信息与通信
可爱又迷人的反派角色“yang”24 分钟前
k8s(三)
linux·运维·网络·docker·容器·kubernetes
三块钱079426 分钟前
nas-群晖docker查询注册表失败解决办法
运维·docker·容器