Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
Delphi

DelphiのLinux Dockerサポートを使ってみよう

the future of starts demands massive productivity

ここ数年、物理マシンや仮想マシンのかわりに、サーバーサイドのソリューション(そして、実際にはあらゆる種類のアプリケーション)が軽量なコンテナに配置されることが一般化しています。これは、同じ実行環境を再構築し、より多くのスケーラビリティを確保する上で、より柔軟性をもたらすからです(テストの観点からも同様です)。10.3.3リリースにより、エンバカデロでは、一般的なLinuxアプリケーションのDockerコンテナへの配置サポートを開始しました。特にRAD Serverへの配置をサポートしています。

このブログ記事では、DockerとDocker Hubを紹介するとともに、Linuxアプリケーションを簡単にDockerに配置する手順を説明します。また、次のブログ記事では、RAD Serverの配置にフォーカスして説明します。また、このトピックに関するより詳細なホワイトペーパーも準備しています。

Dockerとは

Dockerは、コンテナファイル内のバンドルとしてソフトウェアのパッケージングと提供を可能にするOSレベルの仮想環境です。コンテナファイルはDockerエンジンによって実行され、複数のコンテナを同じLinuxインストレーション上で並列実行できます。それぞれのコンテナ内はOSレベルの仮想環境であると言えます。

コンテナはDockerエンジンによって実行され、仮想マシンのようなハードウェア仮想化を伴わないため軽量です。コンテナは、環境構築で実行する一連のコマンドをDockerfileというファイルに記述してビルドされたコンテナイメージで生成されます。コンテナイメージは、Dockerエンジンによって実行されます。ビルドステップと実行ステップの双方で、特定のコンテナイメージのビルドや実行を定義するいくつもの引数を指定することができます。

加えて、既存のコンテナイメージは、Dockerfileでベース・イメージとして使用することができます。これにより、既存のコンテナイメージの機能の上に、さらに新しい機能を追加することができるのです。https://www.docker.com/ には、コンテナとDockerに関しての多くの情報ソースがあります。

Docker Hubとは

Dockerは、Dockerイメージを一般に、あるいはチーム内に配布したい開発者や提供者向けのサービスを提供しています。このサービスは、Docker Hubとして知られており、ユーザーが特定のDockerイメージが置かれているリポジトリを使用する方法を提供します。Dockerリポジトリでは、Dockerイメージのバージョン管理もサポートしています。Docker Hubには、多くのユーザーがベース・イメージとして使用できるUbuntuイメージなどのオフィシャルイメージも含まれています。

RAD Studio Dockerコンテナ

RAD Studio Dockerコンテナであるpaserver、pa-radserver、pa-radserver-ibは、Docker Hubで直接利用できるほか、(GitHub上の)Dockerfileを追加ヘルパーユーティリティとともに利用できます。これらのコンテナを、Dockerを使用してDocker Hubからpullする場合、radstudio/paserver、radstudio/pa-radserver、radstudio/pa-radserver-ibのように、コンテナ名の前に組織名を加える必要があります。このブログ記事では、最初のコンテナ、つまりRAD Serverを含まないradstudio/paserverについて説明します。

Dockerコンテナには、インスタンス始動時にDockerエンジンに渡せるいくつものパラメータがあります。加えて、Dockerイメージのビルド/実行時にも、カスタムビルドと実行パラメータを定義できます。私たちが提供しているスクリプトには、例えば、PAServerのパスワード指定など、いくつものカスタムパラメータが含まれています。

Dockerコンテナのインスタンスは、インスタンス内で実行されているアプリの操作/やり取りが可能なフォアグラウンドか、サービスのように実行されるバックグラウンドのいずれかで実行できます。

Dockerコンテナインスタンスは、デフォルトでは、実行中のいずれの変更も保管しません(このインスタンスは一時的なイメージに過ぎません)。しかし、永続化ボリュームをDockerインスタンス内にセットアップすることができ、これによってDockerコンテナインスタンスの実行間で、変更を保持することができます。Dockerインスタンス内のディレクトリには、Dockerを実行するホストOS側のボリュームをマウントでき、このディレクトリ内でのいずれの変更もボリュームによってDockerインスタンスの複数の実行間で保持されるのです。

Linux環境へのDockerインストール方法

Dockerシステムのインストール方法は複数あります。ひとつは、Ubuntu OSに含まれるAPTパッケージマネージャを使う方法です。APTを使ってDockerをインストールするには、sudoまたはスーパーユーザーアカウントを使用して、単純にaptインストールコマンドを実行するだけです。

PAServer Dockerイメージ

PAServer Dockerイメージは、Ubuntu:Bionicをベースイメージとして使用しており、PAServerツールとその機能を含むようにビルドします。PAServerツールは、エンバカデロのサーバーからダウンロードされます。このイメージには、PAServerと、BroadwayD(Linux向けUIを作成できるFMXLinuxライブラリで使用。Delphiに無料で同梱されるライブラリ)を使用するために必要となるGTK+フレームワークを含む依存関係のあるすべてが含まれます。BroadwayDは、GTK+アプリケーションをHTML5とWebソケットを使用してWeb上に表示するために使用します。これら2つのツールを同じDockerコンテナで提供することで、開発者は、コンソールアプリケーションとGUIベースのアプリケーションをPAServerを経由して配置し、BroadwayDサーバーを経由したWebブラウザ上で、そのGUIアプリケーションを表示させることができます。

このイメージには、以下のようないくつかのパラメータが用意されています。

  • ビルドパラメータまたは実行パラメータとして指定可能なPAServerパスワード
  • フォアグランドのインタラクティブモード(-it)またはデタッチモード(-d)での実行
  • 外部PAServerポート(コンテナでPAServerポートにマップされるホストのポート番号)およびブロードウェイポートの再マッピング
  • PAServer向けのデフォルトパスワードは ‘embtdocker’ です

以下は、Dockerイメージのダウンロード方法と、いくつかのパラメータを指定してDockerコンテナを起動する例です。

これを実際に実行した際のスクリーンショットは下記のとおりです。(Windows 10のPowerShellからWindows標準のssh.exeコマンドを使用してLinuxに接続中)

この時点でホストOS側のIPアドレスとポート番号でRAD StudioのIDEからDockerイメージにアクセスでき、LinuxアプリケーションをDockerイメージによってホストされたPAServer経由で配置、実行できます。したがってDelphiアプリケーションがDocker上で実行されます。

GitHub上のDockerfile

Docker Hubからイメージをpullするのではなく、GitHubで公開しているDockerfileとスクリプトを使ってカスタムイメージを作成することもできます。PAServerのDockerfileには、DockerによってDockerイメージをビルドする際に使用するコマンドが含まれています。DockerfileはDelphiのバージョン別に提供しており、それぞれ特定バージョンのPAServerバージョンを使用します。適切なファイルを、以下のサイトからダウンロードしてください。

https://github.com/Embarcadero/paserver-docker

次回予告

次回のブログ記事では、Docker経由でのRAD Serverの配置にフォーカスします。RAD Serverの配置は、まさに私たちがDockerコンテナサポートを進めた理由に当たります。ご期待ください。


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

   Free Delphi Community Edition   Free C++Builder Community Edition

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

IN THE ARTICLES