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 用户,默认挂载后,在创建站点时,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
标签:arcgis,server,etc,&&,镜像,docker,ags,arcgisserver
From: https://www.cnblogs.com/lqqgis/p/18071115