この記事は、Md. Ehsanul Haque Kanan氏のブログの抄訳です
Dockerは、アプリケーションのデプロイメントプロセスを効率的に簡素化し、自動化するために非常に便利です。 そして迅速かつ一貫性を持ってソフトウェアをパッケージ化することができます。そのため、世界中の開発チームの間で非常に人気があります。このブログでは、RAD StudioからDockerへのアプリケーションのデプロイ(配置)の詳細について説明します。
Table of Contents
Dockerとは?
Dockerは、アプリケーションのビルド、デプロイ、管理するためのオープンソースのコンテナ化プラットフォームです。 アプリをコンテナにパッケージ化することで、デプロイメントプロセスを大幅に簡素化でき、製品開発のライフサイクルから反復的なタスクを取り除き、アプリケーションのビルドプロセスを加速させます。
なぜDockerを使うべきなのか?
- 開発ライフサイクルを効率化し、アプリケーションを迅速かつ一貫性をもってデプロイ可能
- レスポンシブなデプロイとスケーリングをサポート
- 軽量、高速、低コストのソリューションを提供
また一般の仮想マシン(VM)と比較すると、以下の点でメリットがあります。
- コンテナの準備はコマンドを少し実行するだけで、ほとんど自動化が可能
- 実行に必要なディスク容量が少ない
- 動作時のCPUリソース、メモリが少ない
- 必要なときにすぐに起動できる(ほぼ一瞬)
RAD Studio から Docker コンテナにアプリをデプロイする方法
RAD StudioからDockerへのデプロイはとても簡単です。必要な事項も含めて以下で、手順を説明いたします、
(1) まず、RADServerDockerDeploy.dpr というファイルを作成します。 このファイルには、プロジェクトのメインファイルのソースコードが含まれています。
(2)それでは、これから順番に.dprファイルに対して必要なコードを実装していきます。
1 2 3 4 5 6 7 8 9 10 11 |
program RADServerDockerDeploy; {$APPTYPE CONSOLE} {$R *.res} |
(3) System.Classes、System.Types、System.SysUtilsの他、さまざまなユニットをuses句に定義します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
uses System.Classes, System.Types, System.SysUtils, {$IF DEFINED(POSIX)} Posix.Stdlib, {$ENDIF POSIX} IniFiles; |
(4)サーバーパッケージ、サーバーモジュールパス、およびターゲット設定パスを指定します。
1 2 3 4 5 6 7 |
const SERVER_PACKAGES = 'Server.Packages'; TARGET_MODULE_PATH = '/etc/ems/module.so'; TARGET_SETTINGS_PATH = '/etc/ems/emsserver.ini'; |
(5)ResStream、IniFile、およびコマンド変数を定義します。
1 2 3 4 5 6 7 8 9 10 11 |
var ResStream: TResourceStream; IniFile: TMemIniFile; {$IF DEFINED(POSIX)} LCommand: String; {$ENDIF} |
(6)最後に、以下のコードをまとめて実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
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の利用を検討してみてください。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition