文章
· 四月 18, 2021 阅读大约需 5 分钟

IRIS Docker的安装

IRIS相比Caché在部署上的一个进步是支持docker。即便不是云部署, 使用docker也带来非常多的便利。 尤其是在开发测试环节,由于docker的使用更便捷,除非要模拟客户的环境或者做规定的性能测试,我在测试中基本已经不再使用本机的实例或者虚机。IRIS的联机文档有详细的IRIS docker安装使用指导,本文只是一个简单的,快速上手的在测试环境安装IRIS docker的简单步骤,尤其适合初学者。

注意Windows上docker可能会遇到这样那样的问题,因此通常还是推荐在Linux或者Mac OS上使用。正式的生产环境的IRIS docker container也是不支持Windows系统的。

Referrence
- First Look: InterSystems Products in Docker Containers
- Running an InterSystems IRIS Container: Docker Run ExamplesRunning an InterSystems IRIS Container: Docker Run Examples

1. 在操作系统上安装Docker环境

Docker官方文档的安装步骤非常清晰,我按照上面的步骤在MAC和CentOS上安装docker从来没有出现过问题。恰恰是这个文档中没有的Redhat上的安装,过程中曾碰到过几个问题,在网上搜索了答案,也不算困难。

简单的复述一下步骤:root用户的最简单安装,没有权限问题, 没有docker网络修改等等:

  1. 安装yum-util, 用于添加yum源,如果您的系统中已经有了yum-utils包这步可以省略

    sudo yum install -y yum-utils
    
  2. 添加docker的Repo到yum源并确认

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum repolist
    
  3. 安装3个docker组件

    sudo yum install docker-ce docker-ce-cli containerd.io
    
  4. 启动Docker

    sudo systemctl start docker
    
  5. 确认安装成功。'docker run'命令会去本地的库里找'hello-world',没有找到就去网上下一个"images",然后创建一个docker容器给你使用。

    sudo docker run hello-world
    

安装结束您想要到https://hub.docker.com/注册一个账户,用来下载上传docker image。 下载命令使用'docker pull', 比如

docker pull nginx

2. 下载IRIS Docker image

在线文档Container Images Available from InterSystems中介绍了https://containers.intersystems.com网站上可以下载的IRIS images的列表,其中community版本不需要license,其他的版本需要从InterSystems处获得IRIS docker版的专用license.

下面是登录并下载iris docker image的记录。从网页登录https://containers.intersystems.com,您会得到docker的登录密码"使用的密码"jaRWSBJjcUcNprCKTuMX10PYHNq2IYPrAQoYdp6Siokb"。

[root@centos7 ~]# docker login -u="hma" -p="jaRWSBJjcUcNprCKTuMX10PYHNq2IYPrAQoYdp6Siokb" containers.intersystems.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@centos7 ~]# docker pull containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0
2020.3.0.304.0: Pulling from intersystems/iris-ml
5c939e3a4d10: Pull complete
c63719cdbe7a: Pull complete
19a861ea6baf: Pull complete
651c9d2d6c4f: Pull complete
d21839215a64: Pull complete
7995f836674b: Pull complete
841ee3aaa7aa: Pull complete
739c318c2223: Pull complete
d76886412dda: Pull complete
Digest: sha256:4c62690f4d0391d801d3ac157dc4abbf47ab3d8f6b46144288e0234e68f8f10e
Status: Downloaded newer image for containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0
containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0
[root@centos7 ~]#

另外,您也可以从InterSystems的技术支持网站下载iris docker的压缩包"iris*.tar.gz",然后使用"docker load"安装, 比如:

CNMBPHMA:~ hma$ docker load -i iris-2020.4.0.524.0-docker.tar.gz

3. 创建并运行IRIS Container

简单的办法

如果是只是简单的测试,可以直接运行,但如果不是community版本的docker, 您还需要把license拷贝到container内部。 比如下面的步骤

CNMBPHMA:~ hma$ docker run -d -i -p 52773:52773 -p 51773:51773 --name iris20204 intersystems/irishealth:2020.2.0.211.0
CNMBPHMA:~ hma$ docker cp iris.key iris20204:/usr/irissys/mgr/iris.key

需要注意的是,不同版本的超级端口可能不同,有些是1972,有些是51773。为了省事,您也许可以使用"-P"把所有container内部的端口都映射出来。

除了要拷贝license到container内部,在做测试的时候,您可能还要经常的使用"docker cp"把各种测试文件拷入container。而且,当查看和修改container内部文件的使用,还需要使用下面的命令进入container内部:

CNMBPHMA:~ hma$ docker exec -it iris20204 /bin/sh

因此,如果是您需要一个经常使用的iris container环境,我还是建议您使用下面的方法。

IRIS Container使用外部存储

简单的说,下面的命令
- 使用"--volume"参数为container创建外部存储,将host上的"/root/data/dur"文件夹和container内部的"/dur"文件夹链接起来。(/root/data/dur文件夹要在host上手工创建,这只是一个示意,您可以使用任何可用的目录)
- ISC_DATA_DIRECTORY环境设置会在创建iris container时在/dur文件夹下创建一个子目录”/dur/irisepy",所有IRIS运行的日志,客户配置,mgr目录下的用户数据都会保存在这个目录。因为"/dur"是外部存储,即使docker container被删除数据也不会丢失。这对container的重新创建或者iris升级都带来很大的方便。在线文档上对如果覆盖或者升级带有外部存储的iris container有详细的介绍。
- “key"参数定义了在IRIS container创建时会把"/dur/license"目录下的iris.key拷贝到iris安装目录的mgr下并激活。也就是说,在运行命令前, 您需要在host上在"/root/data/dur"目录下创建"license"子目录并将iris.key拷贝进去。

    docker run --name irisepy --init -d\
         -p 9091:1972 -p 9092:52773\
         -v /root/data/dur:/dur\ 
         --env ISC_DATA_DIRECTORY=/dur/irisepy \
         containers.intersystems.com/intersystems/iris-ml:2020.3.0.304.0 \
         --key /dur/license/iris.key    

希望您喜欢使用docker