Docker 制作与使用 ArcgisServer 镜像

PS: 有状态服务本身不适合部署到容器中,数据恢复比较困难,生产环境请直接安装到Linux服务器中

1.准备文件

在同级目录下,准备以下内容

  • 空的dockerfile文件:arcgisserver.dockerfile

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

  • ArcGISServer的许可文件:ArcGISServerxx_xxxxxx.ecp

在空白 arcgisserver.dockerfile文件中填入下面内容:

FROM ubuntu:20.04

################
# dockerfile中的命令尽量写在一起,不然镜像会很大
# 因为每个条命令都会成生一个页层(在完全复制上一个页层并添上新的)
################

# 6443、6080 为ArcGIS Server的通信端口
# 6006为ArcGIS Server内部进程端口,如果端口6006未打开,则ArcGIS Server不能自动增加到其他端口
# 1098、6099和其他随机端口在各ArcGIS Server计算机内启动进程ArcGIS Server使用端口,从其他计算机进行访问时无需打开这些端口
# 如果ArcGIS Server部署为ArcGIS GeoAnalytics Server,则端口12181、12182、12190、56540-56545 和 7077 也将被用于计算机间通信
EXPOSE 6443 6080 6006 1098 6009 12181 12182 12190 56540 56541 56542 56543 56544 56545 7077 2443

# 设置时区
ENV TZ=Asia/Shanghai
# 设置中文
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    # 设置源
    echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse\n \
            deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse\n \
            deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse\n \
            deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse\n \
            deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse\n \
            deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse\n \
            deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse\n \
            deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse\n" > /etc/apt/sources.list && \
    apt-get update && \
    apt-get install --no-install-recommends -y vim && \
    # 安装中文语言包
    apt-get install --no-install-recommends -y language-pack-en language-pack-zh-hans && \
    # 安装用户密码包
    apt-get install --no-install-recommends -y passwd && \
    # 安装必要的编译包
    DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -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 '133.133.0.3 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,配置用户
    apt-get install --no-install-recommends -y sudo && \
    echo 'ags ALL=(ALL) NOPASSWD:ALL'>> /etc/sudoers && \
    rm -rf /var/lib/apt/lists/*

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 ./install_package/ArcGIS_Server_Linux_108_172977.tar.gz \
    ./install_package/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 -itd --name arcgisserver \
    --hostname arcgisserver -p 6443:6443 -p 6080:6080 \
    lqqgis/arcgisserver:10.8

# 挂载arcgisserver缓存服务的文件夹    
docker run -itd --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

# 自定义网络
docker network create \
 --driver bridge \
 --subnet 133.133.0.0/16 \
 --gateway 133.133.0.1 \
 arcgis-net

docker run -itd --name 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 \
   --net arcgis-net \
   --hostname arcgisserver \
   --ip 133.133.0.2 \
   lqqgis/arcgisserver:10.8

docker run -itd --name 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 \
   --net arcgis-net \
   --hostname=arcgisserver.local.com \
   --ip 133.133.0.2 \
   --add-host=arcgisdatastore.lcoal.com:133.133.0.3 \
   --add-host=arcgisportal.lcoal.com:133.133.0.4 \
   lqqgis/arcgisserver:10.8

PS:挂载 arcgisserver 的 directories 与 config-store 服务的文件夹时,一定要对宿主机挂载路径设置为所有用户可访问,因为 arcgisserver 容器的用户是 ags 不是 root 用户,默认挂载后,在创建站点时,arcgisserver会报错

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

5. 建新arcgisserver容器使用之前容器挂载的地图缓存配置数据

如果不小心删除了发布很多服务的 arcgisserver 容器,且这个容器服务的配置是挂载在宿主机上的,为了能使用之前容器配置的所有服务,我们可以重新运行一个新的 arcgisserver 容器,并挂载到宿主机相同位置。在新建站点时,保证站点名、密码、缓存路径的设置都要完全一样,但是在点击完成时,会现出以下错误:

处理方法是,找到挂载在宿主机上 arcgisserver 的配置文件夹 directoriesconfig-store,删除config-store文夹下的.site隐藏文件夹,删除dircetories的子文件夹arcgiscachearcgisjobsarcgisoutputarcgissystem中的.site隐藏文件夹;同时删除dircetories/arcgissystem的子文件夹arcgisindexarcgisinputarcgisjobregistryarcgisuploadskml中的.site隐藏文件夹,然后就可以正常新建站点了。

posted @ 2024-03-13 17:38  lqqgis  阅读(91)  评论(0编辑  收藏  举报