先日、「DelphiのLinux Dockerサポートを使ってみよう」というブログ記事で、DockerスクリプトとDelphi Linuxアプリケーションを、手動あるいはPAServer経由でIDEから配置するのにすぐに利用できるDocker Hub上のDockerイメージについて紹介しました。

さて、エンバカデロがDockerサポートを進めた主な理由は、RAD Serverソリューションの配置支援にあります。

RAD Serverとは

ここ数年間、エンバカデロでは、RAD Serverと呼ばれるモダンな多層Webサービス開発のためのソリューションの構築にフォーカスしてきました。このテクノロジーを用いれば、開発者は迅速に新しいアプリケーションバックエンドを構築したり、既存のDelphi / C++クライアントサーバーアプリケーションのビジネスロジックを、オープン、ステートレース、かつセキュアでスケーラビリティを有した、モダンなサービスベースのアーキテクチャに移行させることができます。RAD Serverは、Windows上のIIS環境またはLinux上のApache環境に配置できます。RAD Serverは、ユーザー情報や使用状況などを保存するためのデータベースとして、エンバカデロのInterBaseのカスタムインスタンスを使用しています。開発者は、ランタイムパッケージ(BPL)として、RAD Serverに追加可能な(任意の数のカスタムエンドポイントを含む)リソースモジュールを構築します。
RAD Serverの詳細は、http://docwiki.embarcadero.com/RADStudio/Rio/ja/RAD_サーバーの概要 をご覧ください。なお、RAD Studio Enterpriseには、RAD Serverのシングルサイト配置ライセンスが、Architectにはマルチサイト配置ライセンスが含まれています。

これまでの配置方法

RAD Serverソリューションは、開発環境にローカルのスタンドアロンバージョンとして構築することができますが、このバージョンはパフォーマンスに制限があり、配置用としての使用は推奨されません。配置用には、GetItパッケージマネージャを通じて、WindowsとLinuxの双方に向けて必要なファイルを配置するためのインストーラを提供しています。RAD Serverを配置したいサーバーがある場合には、これらのインストーラを使ってRAD Serverを配置し、必要なライセンスを設定します。

コンテナへの配置

別の方法としては、Linux Dockerコンテナに、用意された(あるいはこれらをカスタマイズした)スクリプトを使って、RAD Serverを配置することもできます。これには、2つのアプローチを用意しています。

  1. RAD Server、Apacheに加えPAServerが含まれるpa-radserver Dockerイメージの使用
  2. 上記に加え、RAD Serverデータベース(InterBase)が含まれるイメージの使用

ただし通常は 1. の pa-radserver イメージを使用し、RAD Serverデータベースは別のサーバーや仮想マシン、コンテナで運用することを推奨します。RAD Serverデータベースにはライセンスアクティベーションが必要ですが、コンテナを再構築すると、そのたびにライセンスアクティベーションが必要となるからです。pa-radserver イメージを使用する場合は別途構築したRAD Serverデータベースが稼働するホストのIPアドレスとポート番号を指定します。

pa-radserver Dockerイメージ


pa-radserver Dockerイメージは、Ubuntu:Bionicをベースイメージとして使用し、PAServerと設定を加えたApacheインストレーション上のRAD Serverを追加しています。PAServerアーカイブとRAD Serverのインストーラは、エンバカデロのサーバーからダウンロードされます。このイメージは、前回のブログ記事で紹介したPAServerイメージのすべての機能に加えて、Apache上のRAD Serverが利用できるようになっています。
このDockerコンテナを用いれば、開発者は、RAD Serverをプロダクション環境に配置し、LinuxアプリケーションとカスタムRAD Serverエンドポイントを配置、テスト、デバッグできるようになります。設定オプションには、PAServerのパスワードやRAD Serverデータベース(InterBase)の位置やポートなどの項目が含まれます。
以下は、このDockerイメージをダウンロードして実行する例です。この例では、RAD Serverデータベース(InterBase)はDockerコンテナを実行するホストOS上のポート番号3050で動作中のインスタンスを利用します。他のパラメータは、前回のブログ記事と同様です。

docker pull radstudio/pa-radserver
docker run -d --mount source=ems,target=/etc/ems -e DB_PORT=3050 -e DB_HOST=127.0.0.1 -e PA_SERVER_PASSWORD=securepass -p 80:80 -p 64211:64211 -p 8082:8082 radstudio/pa-radserver

以上で、emsserver.iniファイルの設定やパッケージのカスタマイズを行うことなく、サーバーのインストールが完了しました。この状態で、RAD Serverカスタムエンドポイントを手動で配置したり、PAServerを使ってRAD StudioのRAD Server向けプロジェクトのファイルを配置することができます(この方法はよい考えだと思いますが、この記事の範囲外になります)。
このスクリプトは、Dockerエンジンを実行するホストOSにInterBaseをインストールし、RAD Serverライセンスによるアクティベーションが完了した状態で実行する必要があります。

pa-radserver-ib Dockerイメージ

もうひとつのアプローチは、pa-radserver-ib Dockerイメージを使う方法です。このイメージは、Ubuntu:Bionicをベースイメージとして使用し、PAServer、Apache上のRAD Serverに加えてRAD Serverデータベース(InterBase)のインストールと設定が含まれています。PAServerアーカイブとRAD Serverのインストーラは、エンバカデロのサーバーからダウンロードされます。pa-radserver-ib Dockerfileは、RAD ServerライセンスSLIPファイルを受け入れるようにビルド時に設定でき、これにより完全にライセンス設定のされたDockerコンテナを作成することができます。
この方式を選択しない場合は、pa-radserver-ibコンテナは、最初に起動するときにフォアグラウンドモードで実行する必要があります。これにより、RAD Serverライセンスを追加することが可能になります。このイメージには、pa-radserverイメージのすべての機能に加え、RAD Serverデータベース(InterBase)が含まれています。つまり、単一のセルフコンテナ化されたRAD Serverインスタンスを提供します。このイメージは、PAServerとbroadwaydを無効化することで、プロダクション環境として実行するように設定することができます。オプションは、ビルド時または実行時に設定できます。
以下は、これを実行するためのコマンド例です(ライセンス設定には影響を与えません。詳細は次項を参照)。

docker pull radstudio/pa-radserver-ib
docker run -it -e PA_SERVER_PASSWORD=securepass -p 80:80 -p 64211:64211 -p 8082:8082 -p 3050:3050 --mount source=interbase,target=/opt/interbase --mount source=ems,target=/etc/ems radstudio/pa-radserver-ib

RAD Server Dockerコンテナでのライセンスの設定方法

さて、セルフコンテナアプローチが理想的ではないと言える理由が2つあります。ひとつは、システムを実行するたびにデータベースを生成する必要があるということ、もうひとつは、ライセンスとのバッティングがあることです。この2番目の問題については、いくつかのオプションを提案できます。
スタンドアロンのpa-radserver-ib Dockerコンテナイメージで、RAD Serverのライセンスを設定するには2つの方法があります。ひとつの方法は、Dockerfileをビルドし、既存の配布用ライセンスSlipファイルを得られるようにすることです。もうひとつは、既存のpa-radserver-ib Dockerコンテナイメージインスタンスをインタラクティブモードで実行し、RAD Serverのライセンス番号を入力して、エンバカデロに登録することです。いずれの方法も、実行インスタンス間でライセンス情報が保持されるように、永続化ボリュームで実行する必要があります。

GitHub上のDockerスクリプト

このブログ記事で採り上げた2つのイメージ向けのスクリプトは、以下から入手できます。

この2つのイメージは、前回のブログ記事で紹介したPAServer向けのイメージと同じくDocker Hubのhttps://hub.docker.com/u/radstudio に保管されています。

DockerによるRAD Server配置に関する詳細情報

DockerによるRAD Serverの配置に関するより詳細な情報は、ホワイトペーパーにまとめて提供する予定です。RAD Serverの配置に関連するホワイトペーパーは、以下のページからダウンロードできます。

https://www.embarcadero.com/jp/products/rad-server/white-papers

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder. Design. Code. Compile. Deploy.

Start Free Trial   Free Delphi Community Edition   Free C++Builder Community Edition   Upgrade Today  

Anonymous