Site icon Embarcadero RAD Studio, Delphi, & C++Builder Blogs

RAD StudioからDockerにアプリをデプロイするには?

deploy from rad studio to docker featured image 2

この記事は、Md. Ehsanul Haque Kanan氏のブログの抄訳です

Dockerは、アプリケーションのデプロイメントプロセスを効率的に簡素化し、自動化するために非常に便利です。 そして迅速かつ一貫性を持ってソフトウェアをパッケージ化することができます。そのため、世界中の開発チームの間で非常に人気があります。このブログでは、RAD StudioからDockerへのアプリケーションのデプロイ(配置)の詳細について説明します。

Dockerとは?

Dockerは、アプリケーションのビルド、デプロイ、管理するためのオープンソースのコンテナ化プラットフォームです。 アプリをコンテナにパッケージ化することで、デプロイメントプロセスを大幅に簡素化でき、製品開発のライフサイクルから反復的なタスクを取り除き、アプリケーションのビルドプロセスを加速させます。

なぜDockerを使うべきなのか?

また一般の仮想マシン(VM)と比較すると、以下の点でメリットがあります。

RAD Studio から Docker コンテナにアプリをデプロイする方法

RAD StudioからDockerへのデプロイはとても簡単です。必要な事項も含めて以下で、手順を説明いたします、

(1) まず、RADServerDockerDeploy.dpr というファイルを作成します。 このファイルには、プロジェクトのメインファイルのソースコードが含まれています。

(2)それでは、これから順番に.dprファイルに対して必要なコードを実装していきます。

program RADServerDockerDeploy;
 
 
 
 
{$APPTYPE CONSOLE}
 
 
 
 
{$R *.res}

(3) System.Classes、System.Types、System.SysUtilsの他、さまざまなユニットをuses句に定義します。

uses
 
System.Classes,
 
System.Types,
 
System.SysUtils,
 
 
 {$IF DEFINED(POSIX)}
 
 Posix.Stdlib,
 
 {$ENDIF POSIX}
 
 
IniFiles;

(4)サーバーパッケージ、サーバーモジュールパス、およびターゲット設定パスを指定します。

const
 
SERVER_PACKAGES = 'Server.Packages';
 
TARGET_MODULE_PATH = '/etc/ems/module.so';
 
TARGET_SETTINGS_PATH = '/etc/ems/emsserver.ini';

(5)ResStream、IniFile、およびコマンド変数を定義します。

var
 
 ResStream: TResourceStream;
 
 IniFile: TMemIniFile;
 
{$IF DEFINED(POSIX)}
 
 LCommand: String;
 
{$ENDIF}

(6)最後に、以下のコードをまとめて実装します。

begin
 
  try
 
    // Add your RAD Server resource module .so file via Project|Resources and Images...|Add...
 
    // Be sure to set Identifier to Module and Type should be set to RCDATA
 
    ResStream := TResourceStream.Create(HInstance, 'Module', RT_RCDATA);
 
    try
 
      ResStream.Position := 0;
 
      ResStream.SaveToFile(TARGET_MODULE_PATH);
 
    finally
 
      ResStream.Free;
 
    end;
 
 
 
 
    IniFile := TMemIniFile.Create(TARGET_SETTINGS_PATH);
 
 
 
 
    IniFile.EraseSection(SERVER_PACKAGES);
 
    IniFile.WriteString(SERVER_PACKAGES,TARGET_MODULE_PATH,ExtractFileName(TARGET_MODULE_PATH));
 
 
 
 
    IniFile.UpdateFile;
 
    IniFile.Free;
 
 
 
 
    {$IF DEFINED(POSIX)}
 
    LCommand := 'service apache2 restart';
 
    _system(PAnsiChar(AnsiString(LCommand)));
 
    {$ENDIF POSIX}
 
 
 
 
  except
 
    on E: Exception do
 
      Writeln(E.ClassName, ': ', E.Message);
 
  end;
 
end.

アプリをDockerにデプロイするソースコードを入手するには?

アプリをDockerにデプロイするための完全なサンプルのソースコードは以下のURLから入手できます。

https://github.com/Embarcadero/pa-radserver-ib-docker/

デプロイには本当にDockerを使うべきでしょうか?

Dockerを使用すると、デプロイ時間を数秒に短縮できます。 そのため、プロセス全体が非常に迅速になります。 さらに、Dockerには環境上の制限がないため、デプロイの一貫性と拡張性が向上します。 もし興味をもちましたら、ぜひDockerの利用を検討してみてください。

Exit mobile version