docker 製作與使用 arcgisserver 映象

lqqgis發表於2024-03-13

PS: 有狀態服務本身不適合部署到容器中,資料恢復比較困難,生產環境請直接安裝到Linux伺服器中

1. 準備內容

在同級目錄下,準備以下內容

  • 空的dockerfile檔案:arcgisserver.dockerfile

  • linux版的ArcGISServer安裝包:ArcGIS_Server_Linux_xxxxxx.tar.gz

  • ArcGISServer的許可檔案:ArcGISServerxx_xxxxxx.ecp

在空白 arcgisserver.dockerfile檔案中填入下面內容:

# 基於centos8
FROM centos:latest 
################
# dockerfile中的命令儘量寫在一起,不然映象會很大
# 因為每個條命令都會成生一個頁層(在完全複製上一個頁層並添上新的)
################

    # 暴露埠
EXPOSE 1098 4000 4001 4002 4003 4004 6006 6080 6099 6443

ENV TZ=Asia/Shanghai
    # 設定時區
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* && \
    # 安裝中英文語言包, -y:Y/N時預設執行Y
    yum install -y glibc-langpack-zh && \
    yum install -y glibc-langpack-en && \
    echo "export LC_ALL=zh_CN.utf8" >> /etc/profile && \
    source /etc/profile && \
    # 安裝vim
    # yum install -y vim && \
    # 安裝使用者密碼包
    yum install -y passwd && \
    # 安裝必要的編譯包
    yum install -y gettext && \
    # 設定使用者密碼
    echo "root:lqqgis"|chpasswd && \
    # 使用groupadd和useradd命令建立使用者ags和組local,並將ags用s戶加入local組,ags使用者的密碼是arcgis。
    groupadd local && \
    useradd -g local -m -r ags && \
    echo "ags:lqqgis"|chpasswd && \
    # /***********安裝成功後要根據實際情況進行修改***********/
    echo 'HOSTNAME = arcgisserver' >> /etc/sysconfig/network && \
    # echo '127.0.0.1 arcgisserver.local.server arcgisserver' >> /etc/hosts #報錯,失敗:/etc/hosts: Read-only file system
    # 建立安裝資料夾,並檔案進行許可權修改
    # ArcGIS_Server_Linux_108_172977.tar.gz解壓後為/tmp/ArcGISServer
    mkdir /tmp/ArcGISServer && \
    chown -R ags:local /tmp/ && \
    chown -R 777 /tmp/ && \
    chown -R ags:local /tmp/ArcGISServer && \
    chmod -R 777 /tmp/ArcGISServer && \
    # 編輯limits.conf檔案,在檔案的最後一行, `#End of file`前新增如下內容:
    echo 'ags soft nofile 66666\n ags hard nofile 66666\n ags soft nproc 25059\n ags hard nproc 25059'>> /etc/security/limits.conf && \
    # 安裝sudo,配置使用者
    yum install -y sudo && \
    echo 'ags ALL=(ALL) NOPASSWD:ALL'>> /etc/sudoers && \
    # 刪除yum安裝包快取
    yum clean all

VOLUME [ "/home/ags/arcgis/server/usr/directories", "/home/ags/arcgis/server/usr/config-store" ]

# 切換到ags使用者
USER ags

    # 將當前dockerfile同路徑的安裝包tar.gz/授權檔案.ecp匯入至linux系統資料夾/tmp/下
    # ADD匯入tar.gz, 會自動解壓, 並刪除原檔案
ADD ./ArcGIS_Server_Linux_108_172977.tar.gz \
    ./ArcGISServer108_ECP791891115.ecp \
    /tmp/

    # 執行安裝Setup -m 靜默安裝;
    # -l yes 許可協議同意;
    # -d 安裝路徑, 即arcgis/server的路徑, 預設為/home/ags/;
    # -a 授權檔案
RUN /tmp/ArcGISServer/Setup -m silent -l yes -a /tmp/ArcGISServer108_ECP791891115.ecp &&\
    sudo rm -rf /tmp/ArcGISServer

   # 執行服務
CMD /home/ags/arcgis/server/startserver.sh &&\
    tail -f /home/ags/arcgis/server/framework/etc/service_error.log
# ENTRYPOINT ["/bin/bash"]

2.使用 dockerfile 檔案建立映象

docker build -f lqqgis-arcgisserver108.dockerfile -t lqqgis/arcgisserver:10.8 .

# 檢視 docker 儲存情況
docker system df
# 刪除 dockerfile 建立 IMAGE 過程產生的 docker 的 build cacha 快取
docker builder prune

3.使用映象

docker run -it --name arcgisserver \
    --hostname arcgisserver -p 6443:6443 -p 6080:6080 \
    lqqgis/arcgisserver:10.8
    
# 掛載arcgisserver快取服務的資料夾    
docker run -it --name arcgisserver \
   --hostname arcgisserver -p 6443:6443 -p 6080:6080 \
   -v /home/lqq/webapp/arcgis/server/directories:/home/ags/arcgis/server/usr/directories \
   -v /home/lqq/webapp/arcgis/server/config-store:/home/ags/arcgis/server/usr/config-store \
   lqqgis/arcgisserver:10.8

PS:掛載 arcgisserver 的 directories 與 config-store 服務的資料夾時,一定要對宿主機掛載路徑設定為所有使用者可訪問,因為 arcgisserver 容器的使用者是 ags 不是 root 使用者,預設狀態下,無權訪問宿主機掛載的路徑

chomd -R 777 /home/lqq/webapp/arcgis/server/directories
chomd -R 777 /home/lqq/webapp/arcgis/server/config-store

4. 將映象打包

這個映象有11.8G,打包為.tar,便於共享給其他人。

docker save lqqgis/arcgisserver:10.8 -o lqqgis_arcgisserver_10.8.tar

相關文章