在Docker中部署iServer |
Linux 容器虚拟技术(LXC,Linux Container)是一种轻量级的虚拟化手段,它利用内核虚拟化技术提供轻量级的虚拟化,来隔离进程和资源。Docker 扩展了 LXC,提供了更高级别的 API,并简化了应用的打包和部署,为终端用户创建彼此独立的私有环境,可有效节约开发者和系统管理员的环境部署时间。
SuperMap iServer 现已在阿里云和 Docker 中心上线(获取镜像的地址分别为 registry.cn-beijing.aliyuncs.com/supermap/iserver、supermap/iserver,建议您通过阿里云获取 iServer 镜像),仅需几步,即可在Docker中部署iServer。
一般电脑都是默认开启的,可以通过“任务管理器→性能→CPU”,查看虚拟化是否开启。
2. 开启 Hyper-V。
启用 Hyper-V 开启虚拟机,可以通过“控制面板→程序→启用或关闭 Windows 功能→勾选 Hyper-V”进行设置,启用后需重启计算机生效。
3. 访问 https://docs.docker.com/desktop/windows/install/,下载 Docker Desktop。4. 安装 Docker Desktop ,按提示进行安装。
5. 打开 Docker Desktop,等待启用。
若提示"Hardware assisted virtualization and data execution protection must be enabled in the BIOS",可能是由于部分程序会禁用虚拟机管理程序。
解决方法:以管理员身份运行 CMD ,执行以下命令:
bcdedit /set hypervisorlaunchtype auto
操作成功后,重启计算机,并重新打开 Docker Desktop。
6. 当左下角的鲸鱼图标背景为绿色,说明 Docker 可用。
本操作以 CentOS-7-x86_64 为例,该便捷脚本适用于 CentOS、Debian、Ubuntu 等多个系统,不支持自定义安装配置,详情请参见官方文档:https://docs.docker.com/engine/install/。
注:需以 root 用户或最高权限用户登录并执行下述操作。
1. 使用便捷脚本安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2. 安装完成后,执行以下命令查看 Docker 版本,确认已安装成功:
docker --version
本操作以 Ubuntu_18.04_LTS x86_64 为例,其他系统的 Docker 安装可参考官方安装文档:https://docs.docker.com/engine/install/。
注:需以 root 用户或最高权限用户登录并执行下述操作。
1. 卸载可能存在的旧版本:
apt-get remove docker docker-engine docker.io containerd runc
2. 更新 apt 包索引:
apt-get update
3. 安装以下包,使 apt 可以通过 HTTPS 使用存储库(repository):
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
4. 添加GPG密钥及设置 stable 存储库
4.1 添加 Docker 官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.2 设置 stable 存储库:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
4.1 添加阿里云的GPG密钥:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4.2 设置stable存储库:
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
5. 再次更新 apt 包索引:
apt-get update
6. 安装最新版本的 Docker CE:
apt-get install -y docker-ce
至此,已经完成Docker的安装,通过以下命令可以验证是否成功:
docker run hello-world
该命令会下载一个测试文件并且在一个容器里运行它。当容器运行后,将打印一些信息,并自动退出。
针对无法连接公网的局域网场景,我们收集制作了常见操作系统的 Docker 离线安装包,如有需要可联系 SuperMap 支持中心获取。您也可以参考 Docker 官方文档进行安装:https://docs.docker.com/engine/install/binaries/。
安装完成后,启动 Docker:
service docker start
注:若为 Windows 系统,则打开 CMD(命令提示符),执行操作;若为 Linux 系统,需以root用户或最高权限用户登录并执行操作。
您可以通过阿里云获取 iServer 镜像。
拉取指定版本的 iServer 镜像,需要输入对应的 tag,规则如下:
Linux X86-64 架构的镜像 tag:[版本号]-amd64
Linux ARM64 架构的镜像 tag:[版本号]-arm64
例如,输入以下命令即可获取 Linux X86-64 架构 11.2.0 版本的 iServer 镜像:
docker pull registry.cn-beijing.aliyuncs.com/supermap/iserver:11.2.0-amd64
输入以下命令即可获取 Linux ARM64 架构 11.2.0 版本的 iServer 镜像:
docker pull registry.cn-beijing.aliyuncs.com/supermap/iserver:11.2.0-arm64
下载完成后,您可以通过以下命令查看已下载的 image 信息:
docker images
docker load -i *.tar
docker images
基于获取的 iServer 镜像,运行一个Docker容器 iserver1。
如您是从阿里云下载的镜像,执行如下命令,以获取 Linux X86-64 架构 11.2.0 版本的镜像为例:
docker run --name iserver1 -d -p 8090:8090 -v `pwd`/my_opts:/opt/iserverOPTs registry.cn-beijing.aliyuncs.com/supermap/iserver:11.2.0-amd64
其中:
--name 表示为容器指定一个名称。--name iserver1表示指定容器名称为 iserver1;
-d 表示后台运行容器,并返回容器ID;
-p 指定端口映射,格式为:主机(宿主)端口:容器端口。-p 8090:8090 表示指定映射的主机端口(对外暴露端口)为8090,容器端口也为8090;
iServer_JAVA_OPTS 表示 iServer 的 Java 内存配置;
-v 表示映射数据路径,格式为:主机(宿主)路径:容器路径。搭建集群时,使用此参数后可在主节点上发布服务。如果主节点不需要发布服务,则无需使用 -v 参数;
registry.cn-beijing.aliyuncs.com/supermap/iserver 表示对应的镜像名称。如您是获取的离线镜像,则此处应输入对应的镜像名称。您可以通过以下指令,查看查看已有本地仓库已有的镜像信息:
docker images
等待几秒钟,iServer 启动完成。在浏览器中输入 http://<宿主机IP>:8090,即可访问 iServer。
若要使用 iServer 的分布式分析服务,则在运行时需要设置 distributeanalysthost 这个环境变量,其中,distributeanalysthost 对应的是容器内部的ip。
如您是从阿里云下载的 Linux X86-64 架构 11.2.0 版本的镜像,执行如下命令:
docker run --name iserver1 -d -p 8090:8090 --env distributeanalysthost="172.17.0.2" -v `pwd`/my_opts:/opt/iserverOPTs registry.cn-beijing.aliyuncs.com/supermap/iserver:11.2.0-amd64
注意:my_opts 代表要从宿主机中要映射到容器的数据所在的文件夹,可以根据您计算机中的实际路径自定义,/opt/iserverOPTs 为一个已存在于容器中的文件夹,用于存放所有 iServer 相关的配置文件。
在上述步骤中,已通过-v参数指定了从宿主机到 Docker 容器的映射路径(-v `pwd`/my_opts:/opt),因此可以直接将数据放在宿主机的某一目录中(`pwd`/my_opts)。登录 iServer 服务管理器,进入快速发布服务向导,远程浏览时就可以直接在容器的相应目录下找到映射的数据并发布。
路径映射的方式可以用来发布文件型 GIS 数据,如文件型工作空间、MBTiles 瓦片包等。对于存储在数据库中的 GIS 数据,如数据库型工作空间、MongoDB 瓦片等,则无需此映射。建议将数据库单独部署,例如部署在宿主机上或其他机器上,并使所有 iServer 都可以访问该数据库。
可将上述示例中启动的 iServer 作为集群主节点。启动容器son1,作为集群子节点:
如您是从阿里云下载的 Linux X86-64 架构 11.2.0 版本的镜像,执行如下命令:
docker run --name son1 --link iserver1:master -v /home/data:/home registry.cn-beijing.aliyuncs.com/supermap/iserver:11.2.0-amd64
子节点无需对外暴露端口号,可以在宿主机内使用容器son1的内部 IP 访问服务,并发布服务以及加入集群,集群主节点 IP对应别名 master。您也可以通过修改子节点的 iserver-system.xml 的方式手动加入集群,修改内容如下:
<clustering>
<reporters>
<reporter>
<enabled>true</enabled>
<address>http://master:8090/iserver/services/cluster</address>
<isTileWorker>true</isTileWorker>
</reporter>
</reporters>
</clustering>
–link 参数的格式为 --link name:alias,此处 --link iserver1:master表示将该容器连接到iserver1容器上,为iserver1设置别名为master。别名可以随意指定
-v 映射数据路径,方便在子节点上发布服务
两个容器都启动后,可以通过http://<宿主机IP>:8090 访问服务,并在“集群”页面看到子节点已经添加完成,子节点也可以作为切图子节点参与切图任务。
在主节点上开启集群服务,即可使用集群功能。
Docker 部署 iServer 许可配置方法如下:
普通许可配置过程:
使用文件许可,需将容器适配许可文件放置于容器 LICENSE_DIR(默认为 /opt/SuperMap/License)目录下,容器 hostname 与许可文件中记录的保持一致;
使用网络锁硬件许可,需要在启动命令加上 :
-e LICENSE_SERVER=许可服务器 IP