SAP官方已经停止发布,镜像已经移除,从dockerhub中找了网友amitlaldocker的镜像(未经验证),本文是基于官方镜像进行的部署
非官方镜像
本次部署在虚拟机上进行按照docker镜像要求
- cpu 4
- 内存 16G
- 硬盘 150G
1.安装操作系统
我采用的是centos7.6(1810) cpu 16 内存 16G 硬盘500G 为防止空间不够 将整个空间全部分配到 /.
安装操作系统并更新补丁。
2.安装Docker
运行 yum install docker-ce docker-ce-cli containerd.io
启动docker systemctl start docker
配置docker加速服务 创建文件vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
重启守护进程及docker服务 systemctl daemon-reload
systemctl restart docker
测试docker docker run hello-world
成功运行
3.安装sap docker镜像
拉取镜像docker pull store/saplabs/abaptrial:1909
,镜像大小23G,非官方镜像拉取docker pull amitlaldocker/abaptrial:1909
(未验证)
创建容器 docker run --stop-timeout 3600 -i --name a4h -h vhcala4hci -p 3200:3200 -p 3300:3300 -p 8443:8443 -p 30213:30213 -p 50000:50000 -p 50001:50001 store/saplabs/abaptrial:1909 -skip-limits-check
按照官方文档 容器命名只能是a4h,映射端口3200、3300、8443、30213、50000、50001.并跳过环境检测,使用了参数--stop-timeout,该参数会使 Docker 给 HDB 足够的时间在关闭请求时将其 InMemory 数据库写入磁盘。
执行后跳出许可协议确认,填写accept (使用参数-agree-to-sap-license,可以跳过手动输入接受)
出现如图则代表容器成功运行
确保容器第一次运行成功,不成功也要把容器内
/opt/sap/ASABAP_license
拷贝出来,镜像在第一次生成的容器中自动生成的license是可用的,再创建新的容器时会生成新的license,但是不可用。
4.登录SAP
配置登录地址,实例编号00
系统标识A4H
服务器地址配虚机地址
因操作系统防火墙开着对相应端口进行开通
firewall-cmd --zone=public --add-port=3200/tcp --permanent
...
firewall-cmd --reload
账号DEVELOPER
,密码Ldtf5432
,语言EN
5.搭建中遇到的问题
- docker run 镜像报错
首次运行没有注意linux内核限制检查,导致启动报错
Cannot continue because of insufficient system limits configuration!
If you want to continue without recommended limits,
run again with the parameter -skip-limits-check
按文档在启动参数中加入--sysctl kernel.shmmax=21474836480 --sysctl kernel.shmmni=32768 --sysctl kernel.shmall=5242880 --sysctl kernel.msgmni=1024 --sysctl kernel.sem="1250 256000 100 8192" --ulimit nofile=1048576:1048576
但是启动依旧没有成功,最终还是采用了跳过检测参数-skip-limits-check
- docker 新建sap容器报错
Error response from daemon: Conflict. The container name "/a4h" is already in use by container
XYZ. You have to remove (or rename) that container to be able to reuse that name.
因为容器的名称a4h已经存在,用docker rm -f a4h
将之前失败的容器删除
- 启动后license失效
成功运行容器后,登录报Logon not possible (error in license check),推测应该是镜像第一次生成容器时自动生成的license为有效的,后面容器在生成就没有用了,所以在容器第一次生成时要将/opt/sap/ASABAP_license
其拷贝出来,以备后面使用。但是首次部署没注意到这点,容器以被删除,搜索资料后,可以在 https://go.support.sap.com/minisap/#/minisap 生成一个新的临时license
到底部填写信息,生成即可
硬件编码可以进容器查看现有ASABAP_license获取, docker exec -it a4h /bin/bash
进入容器 cat /opt/sap/ASABAP_license
查看lisence,找到HARDWARE-KEY
生成license后传入linux,使用命令 docker cp <local path the key file> a4h:/opt/sap/ASABAP_license
复制license到容器内,用docker exec -it a4h /usr/local/bin/asabap_license_update
更新许可证,系统成功登录。
- 关于系统的启停问题
在以交互模式运行的界面,可以直接按ctrl+c
停止运行,如果这个界面关掉了,系统服务依旧正常运行,这时可以采用docker stop --time 7200 a4h
进行停止
可以使用docker start -ai a4h
重新启动容器,但是这样会生成新的license,应该加上-no-asabap-license-update
参数,防止许可证更新(未验证),也可以在容器中创建文件/opt/sap/.no_ASABAP_license_update
来阻止容器更新许可证(未验证)
修改于2022.11.15,补充SAP官方镜像移除后,其他镜像源及说明