Windows环境GeoServer打包Docker极速入门

目录

  • 1.前言
  • 2.安装Docker
  • 3.准备Dockerfile
  • 4.拉取linux环境
  • 5.打包镜像
  • 6.数据挂载
  • 6.测试数据挂载
  • 7.总结

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访问中国镜像源
在这里插入图片描述

{"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怎么写?下面直接给出示例,都加上了注释,相信不难理解了。

# 使用基础镜像
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上没有这个问题。两种数据挂载方式都可以。如果有人知道后者的原因,也请告诉我一下。回见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473980.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day03(单片机高级)RTOS

目录 RTOS(实时操作系统) 裸机开发模式 轮询方式 前后台(中断方式) 改进(前后台(中断))定时器 裸机进一步优化 裸机的其他问题 RTOS的概念 什么是RTOS 为什么要使用 RTOS RTOS的应用场景 RTOS的…

VScode使用Batch Runner插件在终端运行bat文件

搜索并安装插件Batch Runner 创建测试文件 echo off echo "Hello world"按F5运行

Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC

Debezium日常分享系列之:Debezium3版本Debezium connector for JDBC 概述JDBC连接器的工作原理消费复杂的Debezium变更事件至少一次的传递多个任务数据和列类型映射主键处理删除模式幂等写入模式演化引用和大小写敏感性连接空闲超时数据类型映射部署Debezium JDBC连…

Redis-08 Redis集群

Redis槽位 Redis分片 Redis集群优势 主要掌握第三种 为什么槽位是16384? 三主三从: 每个主机只能写在自己的槽位 所以登录redis集群记得加参数 -c 比如redis-cli -a dc123 -p 6380 -c 加了 -c 相当于会进行路由转发,不属于自己槽位的…

微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)

文章目录 1. 背景2. 设置参数的主要流程2.1 初始化2.2 注册某个params的处理方式以及回调函数2.4 定义好前面的params以及init指定config地点后start处理argv 3. 其他4. DOCA ARGP包相关4.1 主要接口4.2 DOCA ARGP的2个rpm包4.2.1 doca-sdk-argp-2.9.0072-1.el8.x86_64.rpm4.2.…

智能指针原理、使用和实现——C++11新特性(三)

目录 一、智能指针的理解 二、智能指针的类型 三、shared_ptr的原理 1.引用计数 2.循环引用问题 3.weak_ptr处理逻辑 四、shared_ptr的实现 五、定制删除器 六、源码 一、智能指针的理解 问题:什么是智能指针?为什么要有智能指针?智…

初识Linux · 信号处理 · 续

目录 前言: 可重入函数 重谈进程等待和优化 前言: 在前文,我们已经介绍了信号产生,信号保存,信号处理的主题内容,本文作为信号处理的续篇,主要是介绍一些不那么重要的内容,第一个…

IPTV智慧云桌面,后台服务器搭建笔记

环境CentOs7.9 ,安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔,修改服务器端口安全组端口 26029 注意!!!&#xff01…

模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC

文章目录 预测框的预测指标——IoU(交并比)分类预测指标混淆矩阵(Confusion Matrix,TP、FP、FN、TN)Precision(精度)Recall(召回率)P-R曲线F1-scoreTPR、TNR、FPR、FNRROC曲线下面积…

本草智控:中药实验管理的智能时代

3系统分析 3.1可行性分析 通过对本中药实验管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中药实验管理系统采用SSM框架,JAVA作为开发语…

父组件提交时让各自的子组件验证表格是否填写完整

项目场景: 提示:这里简述项目相关背景: 父组件中有三个表格,表格中时输入框,有些输入框是必填的,在父组件提交时需要验证这三个表格的必填输入框中是否有没填写的。 原因分析: 提示&#xff1a…

嘴尚绝卤味独特的口感

在餐饮行业里,嘴尚绝卤味无疑是一颗璀璨的明星。自2021年8月7日创立以来,这个品牌就以其独特的口感和制作工艺赢得了众多食客的青睐。嘴尚绝卤味,作为四川优优熊猫餐饮管理有限公司旗下的主打品牌,专注于提供高品质的休闲佐食&…

JDK17 安装使用

一、Java JDK(Java Development Kit) 它是开发、运行Java应用程序所需的各种工具和库的集合。 二、JDK 1.8(也称为Java 8)和JDK 17是两个重要的版本 这两个版本在语言特性、性能优化和安全性方面都有所不同。 1、语言特性 …

解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题

解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 Chapter1 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 Chapter1 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 目前使用的是三星4K显示屏,屏幕分辨率太高了,导致VMWare Workst…

uniapp 微信小程序地图标记点、聚合点/根据缩放重合点,根据缩放登记显示气泡marik标点

如图,如果要实现上方的效果: 上方两个效果根据经纬度标记点缩放后有重复点会添加数量 用到的文档地址https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addMarkers.htmlMapContext.addMarkers(Object object) 添加标记点Ma…

第6章详细设计 -6.7 PCB工程需求表单

6.7 PCB工程需求表单 PCB工程需求表是PCB设计的入口条件,以一块单板为例,表6.2所示的PCB工程需求表单明确了Signal Integrity(SI,信号完整性)和Power Integrity(PI,电源完整性)的要…

Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系

一.什么是Spring?它解决了什么问题? 1.1什么是Spring? Spring,一般指代的是Spring Framework 它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代码…

重构Action-cli前端脚手架

一、概述 最近一年,为了满足公司业务开发,解决重复搭建项目繁琐过程,自己开发了一个前端脚手架,并发布到npm。随着时间的推移,发现之前的版本存在很多问题,有些功能做不到位,而且代码也不是很规…

Kotlin return与return@forEachIndexed

Kotlin return与returnforEachIndexed fun main() {val data arrayOf(0, 1, 2, 3, 4)println("a")data.forEachIndexed { index, v ->if (v 2) {//类似while循环中的continue//跳过,继续下一个forEachIndexed迭代returnforEachIndexed}println("…

Springboot基于GIS的旅游信息管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…