Windows環(huán)境GeoServer打包Docker的方法實現(xiàn)
1.前言
在 Windows 環(huán)境下將 GeoServer 打包為 Docker,可以實現(xiàn)跨平臺一致性、簡化環(huán)境配置、快速部署與恢復,同時便于擴展集成和版本管理,并通過資源隔離提高系統(tǒng)穩(wěn)定性。由于近期需要在Docker中使用GeoServer,就折騰了一下Docker,也踩了一些GeoServer打包Docker的坑,尤其是在Windows環(huán)境下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的環(huán)境,注意,jdk得是linux環(huán)境下的版本。我準備的GeoServer的版本是geoserver-2.22.5,jdk的環(huán)境是jdk1.8.

最重要的就是Dockerfile怎么寫?下面直接給出示例,都加上了注釋,相信不難理解了。
# 使用基礎鏡像
FROM ubuntu:20.04
# 設置環(huán)境變量
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
# 給啟動腳本增加執(zhí)行權限
RUN chmod +x /usr/local/geoserver-2.22.5-bin/bin/startup.sh
# 設置容器啟動時的默認命令
CMD ["./startup.sh"]
4.拉取linux環(huán)境
因為我們是基于ubuntu:20.04來打包docker的,因此在打包時會自動去拉取ubuntu:20.04,為了防止失敗,我們先手動拉取一下ubuntu:20.04。

等待拉取完畢后,我們使用docker images命令確認一下是否存在ubuntu的鏡像了。

5.打包鏡像
這一步沒什么好說的了,直接在Dockerfile所在的路徑執(zhí)行打包命令就行了,我的機器不知道為什么不識別-t命令,-t是--tag的簡寫,既然不支持簡寫,那我就寫完了吧。唯一注意的地方是打包命令最后面的點不要忘了,表示在當前目錄查找文件。
docker build --tag geoserver:2.22.6 .

現(xiàn)在使用docker images命令看一下是否存在打包好的文件了。

6.數(shù)據(jù)掛載
好了,現(xiàn)在已經打包完成了,還差最重要的一步。gis中涉及的影像數(shù)據(jù)都很大,動不動上百個G,shp文件也要經常變動,所以它們是不可能打包到docker里的,那么怎么讓docker能夠訪問到機器上的這些文件呢?那就是使用數(shù)據(jù)掛載。
首先我們新建兩個數(shù)據(jù)卷。一個掛載data_dir文件夾,一個掛載lib文件夾。因為這兩個文件夾里內容經常要變動。注意在windows上創(chuàng)建的數(shù)據(jù)卷在linux路徑下才能找得到。
docker volume create geoserver_data_dir docker volume create geoserver_lib

這兩個路徑和GeoServer的路徑的對應關系如下:

將右邊兩個文件里的全部內容拷貝到左邊對應文件夾的_data文件夾里,注意:_data這個文件夾是docker自動創(chuàng)建的。

好了,拷貝完畢,現(xiàn)在可以啟動鏡像并指定數(shù)據(jù)掛載了。
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.測試數(shù)據(jù)掛載
現(xiàn)在我想拓展一下mysql的連接,先看一下數(shù)據(jù)存儲里是沒有mysql的選項的。

現(xiàn)在我們把mysql的插件安裝一下,拷貝插件的jar包到我們的掛載路徑geoserver_lib下。

重啟鏡像
docker container geoserver restart

nice,出現(xiàn)了mysql,說明數(shù)據(jù)掛載OK了。
7.總結
本文中我們探討了Windows平臺上GeoServer的Docker打包,以及數(shù)據(jù)掛載,最后進行了測試,表明我們的Docker打包是成功的。需要注意的是Docker命令有時不能識別簡寫形式的命令,那就寫全。另外數(shù)據(jù)掛載可以使用普通的數(shù)據(jù)卷,也可以直接掛載一個目錄。但是我掛載目錄后,在訪問時出現(xiàn)了資源訪問不到的問題。估計是windows的路徑問題導致的,linux上沒有這個問題。兩種數(shù)據(jù)掛載方式都可以。如果有人知道后者的原因,也請告訴我一下。
到此這篇關于Windows環(huán)境GeoServer打包Docker的方法實現(xiàn)的文章就介紹到這了,更多相關GeoServer打包Docker內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決docker不加載 /etc/docker/daemon.json文件的問題小結
在Ubuntu 24.04 LTS Server上安裝Docker后,發(fā)現(xiàn)鏡像不保存且配置文件路徑不正確,通過檢查發(fā)現(xiàn)Docker服務啟動時加載了非預期的配置文件,最終通過修改服務配置文件解決了問題,感興趣的朋友跟隨小編一起看看吧2024-11-11
MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫的方法
這篇文章主要介紹了MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
docker部署springboot和vue項目的實現(xiàn)步驟
本文主要介紹了docker部署springboot和vue項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-06-06
使用docker搭建一套開發(fā)環(huán)境全家桶的詳細教程
這篇文章主要介紹了使用docker搭建一套開發(fā)環(huán)境全家桶,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
PVE下擴展openwrt?for?x86分區(qū)大小方式
本文介紹了在PVE環(huán)境下如何對OpenWRT虛擬機的分區(qū)進行擴容,包括磁盤調整、軟件安裝、分區(qū)配置和系統(tǒng)引導等步驟,操作前需做好備份,以防數(shù)據(jù)丟失2024-10-10

