怒られてDockerに引っ越した話 (SAP NW7.52 Dev. EditionをDockerにインストール)

図らずも、この記事の続きです。
deutschina.hatenablog.com

MacでSAPを使う環境を整えた数日後、とあるメールが届きました。簡単に言うと「きみのLaptopの中に、VirtualBox入っているみたいだけど、それうちの会社的にはダメだから」みたいな内容。Macで無料でやるにはVirtualBox一択なのに、これは参ったなと思ったものの、社畜なので本格的に怒られる前に自主規制することにしました。

対策を1分ほど考えたところ、Dockerを試してみることに。

先人の知恵を拝借

VirtualBoxのような仮想環境とDockerの違いみたいな話は、いろんなところで紹介されているのを斜め読み。今回やりたいのは、DockerにSAP Netweaver 7.52 Developer Editionをインストールすることなので、それに特化した記事を探してみる。英語だけでなく、日本語でもブログの記事を見つけたものの、今回は本家SAPのこの記事をベースにすることに。

Installing SAP NW ABAP into Docker | SAP Blogs

シリーズ記事になっていて、どうせならSAP Cloud ConnectorもDockerで入れちゃいなよということで、CCも入れてしまいました。自分のようなオンプレおじさんもクラウド対応待ったなしでございます。

いざ導入

新しいものを探したと言いつつ、上のブログの記事は2018年5月。その間にお試しNWも7.52 SP04と上がっていたりするので、そのままではうまく行かない状況に遭遇するのは、すでに織り込み済み。

幸いなことに、Githubの方は半年ほど前まで更新されていたので、主にこちらを見ながら作業します。
github.com

事前準備

Docker for Desktop

もちろん、Dockerを使うと言っている以上は、Dockerは必須だよねということで、Docker Desktop for Macはインストール済み。
www.docker.com

SAP Netweaver 7.52 SP04 Developer Edition

Dockerで環境作った後にSAPのインストールをするので、そのファイルはダウンロードしておいてねとのこと。自分の場合は、VirtualBoxに入れるときにダウンロードしたファイルたちが、まだDownloadsにいたので再利用。
developers.sap.com

Homebrewとunrar

SAP NWのダウンロードファイルは解凍(←古い言い方w)しておいてねということでunrarが必要。そのunrarをインストールするためにHomebrewが必要。
brew.sh
Homebrewのトップページ書いてあるコマンドをそのまま貼り付けて実行したら、続いてunrarのインストール。

$ brew install unrar

DockerのResources設定

SAP NWはDockerで扱うにしてはモノが大きいので、PreferenceのResource設定で、メモリを6GB、ストレージを100GB程度にしておく
f:id:deutschina:20200216115751p:plain

vm.max_map_countを1000000ぐらいに大きくしておいてねというのもあるが、Docker Desktopの場合のやり方は少し違うようなので後述。

導入開始

git cloneとSAP NWファイルの展開

ここからは、Githubに説明されている手順に沿って進めみた。クローンを置きたい場所に移動してからgit cloneする。

cd workspace
git clone https://github.com/nzamani/sap-nw-abap-trial-docker.git
cd sap-nw-abap-trial-docker

ダウンロードしてきたSAP NW 7.52 Developer editionのファイルを展開する。SP04ではファイル名が少し変わっているので注意。

$ mkdir sapdownloads
$ unrar x /Downloads/TD752SP04part01.rar ./sapdownloads

Dockerのビルド

git cloneしてきたファイルの中に、Dockerfileがいるので、そのままビルドが開始できる。

docker build -t nwabap:7.52 .

約15GBほどのファイルが転送されてビルドは完了。この記事では取り上げないけど、Dockerfileの中身を見るとビルドにあたってどんな処理が流れるかが見えるので興味深い。DockerhubでpullしたあとBuildする理由も頭の中で整理された感じ。

ビルドしたら、runする。(もし、これを読みながら進めている人がいたら、このコマンド実行はちょっと待って!)

docker run -p 8000:8000 -p 44300:44300 -p 3300:3300 -p 3200:3200 -p 50000:50000 -h vhcalnplci --name nwabap752 -it nwabap:7.52 /bin/bash

VirtualBoxでポートの設定したときと同じ番号が登場しているので、やっていることはイメージしやすいね。ここから、./install.shと行きたいところだけど、結構トラップがあった。

2020/2/22追記
触っていて、ポート番号50000のエラーが出ているのでパラメータに追加。

トラップたち

vm.max_map_count問題

このまますんなり行ければ、良かったんだけど、ここの設定で結構詰まった。
f:id:deutschina:20200216122552p:plain
ここに書いてある方法を試したけど、両方ダメだった。まずscreenを使う方は、日本語JISキーボードだと文字化けして使い物にならず(USキーボードではOK)。もう1つのdocker-machineは、入れてみたけどactiveなmachineがないよと言われて使えず。自分の場合、最近Dockerを入れたので今のDockerのバージョンでは、docker-machineに対応していないのではないかと想像。

その後、いろいろ探してみた結論としては、これで行けました。

$ docker run --privileged -p 8000:8000 -p 44300:44300 -p 3300:3300 -p 3200:3200 -h vhcalnplci --name nwabap752 -it nwabap:7.52 /bin/bash

まずは、--privilegedのオプション付きでrunをしてから、こんな感じで反映された。

# sysctl -w vm.max_map_count=1000000
sysctl vm.max_map_count=1000000

あとは、Githubで説明されているように、インストールを開始すればOK。

# /usr/sbin/uuidd
# ./install.exp

最後の敵は、、、

いよいよSAPのインストールが始まる!という最初のところで、Agreementに同意を求められるんだけど、そこでyesと入力した直後に処理が固まるという現象が発生。

f:id:deutschina:20200216105627p:plain

ブログの方にこんなことが書いてある。

Hint: According to the documentation this installation will take about 20-30 minutes, for me it took only 10-12 minutes. However, in 1 out of 10 cases the installation seems to hang for some reason which I can’t explain (I could reproduce that without Docker as well). In such cases you can simply kill your terminal session which will also stop the container. Then simply remove the docker container with docker rm nwabap751 before you execute the same docker run from above again and continue from there…

10回に1回ぐらいインストールがhangすることがあるけど、そんなときは1回docker containerをremoveしてやり直してみてねとさらっと書いてある。

f:id:deutschina:20200216105617p:plain

ちなみに、これが自分で試した時のrmの記録。10回に1回フリーズするんじゃなくて、フリーズしないのが10回に1回の間違いなのでは?いずれにしても、これは根気よく繰り返すしかないみたい。

この関門をクリアすると、ようやくSAPのインストールが始まり、特に問題がなければ無事にdockerへのお引っ越し完了。それにしても、一番時間かかったのが最後の「運試し」だったのは間違いない。

まとめと今後

ようやくDockerへの引っ越しが完了したので、オンプレおじさんとしては、もう少しクラウドにも手を出してきたいと思います。