IRIS Community EditionのDockerイメージのフットプリントを削減する方法
.png)
インターシステムズ アイデア ポータル(InterSystems Ideas Portal)で最も多くの賛同を得た提案(74票)は、IRISの軽量バージョンを要望するものです。プラットフォームは強力なデータエンジンに成長していますが、多くのプロジェクトではSQLデータベース機能のみが必要とされています。本記事では、コアなデータベース機能にのみ焦点を当てた非公式なコンパクトなIRIS Community Editionイメージを構築する方法を示し、イメージサイズを80%以上削減する方法を説明します。
⚠️ Disclaimer
このプロジェクトは、InterSystems IRIS Community Editionの非公式な実験的なイメージを生成します。
- InterSystemsによるサポートまたは推奨はされていません。
- 使用は自己責任です。これらの変更により、プラットフォームの中核機能が削除され、ツールやAPI、想定される動作との互換性が損なわれる場合があります。
- 確証または保証 なしに生は、産用途への適合性を含みます。
- 上級ユーザーによる教育および実験目的のみに供するものです。
Lightweight IRISと言う軽量バージョンが選ばれる理由
現在のIRISは豊富な機能(相互運用性、分析、機械学習、システム管理など)を備えておりますが、多くのプロジェクトではその中核となるSQL機能のみが必要とされる場合が少なくありません。公式のCommunity Edition Dockerイメージのサイズはおおよそ以下の通りです:
- ディスク使用量: 3.5~3.8 GB
- 圧縮後のサイズ: 約1.1 GB
IRIS Lightでは、それを以下のように簡略化します:
- ディスク使用量: 575~3583 MB
- 圧縮後のサイズ: 約144~148 MB
これにより、以下に最適です:
- マイクロサービスまたはコンテナ化されたSQLの使用
- CIパイプラインの起動とプル時間の短縮
- 水平スケーリングにおいて、完全な機能が不要な場合
イメージのフットプリント比較
対照的に、このアプローチで作成されたストリップダウンされた「IRIS Light」イメージは、約8分の1の圧縮サイズとなります:
$ docker images containers.intersystems.com/intersystems/iris-community
IMAGE ID DISK USAGE CONTENT SIZE
containers.intersystems.com/intersystems/iris-community:latest-cd 14c6314edcc5 3.8GB 1.17GB
containers.intersystems.com/intersystems/iris-community:latest-em 4c25627895eb 3.52GB 1.01GB
containers.intersystems.com/intersystems/iris-community:latest-preview 424e87dbb7d8 3.81GB 1.17GB
By contrast, the stripped-down "IRIS Light" image created via this approach is approximately 8× smaller in compressed size:
$ docker images caretdev/iris-community-light
IMAGE ID DISK USAGE CONTENT SIZE
caretdev/iris-community-light:latest-cd ce5c2d7fa173 583MB 148MB
caretdev/iris-community-light:latest-em fd33a51a0e81 575MB 144MB
caretdev/iris-community-light:latest-preview f10c714117da 583MB 148MB
Diveによるイメージレイヤーの分析
IRIS Community Editionイメージを理解し最適化するため、以下のURLを検証しました:dive。これらはDockerイメージの層を検査し、非効率性を特定するためのツールです。
最適化前で:Vanilla IRIS Community イメージ
下記のスクリーンショットは、公式のiris-community:latest-em イメージの分析結果を示しております。 最大規模の層の一つは 882 MBに達し、 Java、システムライブラリ、およびSQLのみのワークロードに厳密には必要とされないその他のランタイムコンポーネントを含んでおります。
.png)
そして最大のものは1.5GBで、主にIRIS本体が含まれています。/p>
.png)
最適化後で:IRIS Light イメージ
不要なパッケージを削除し、内部IRISストレージを圧縮することで、最終的なイメージは320MBの1層に収まり、大幅なサイズ削減を実現しました。
.png)
IRIS Lightイメージはどのようにつくられるのか
このプロセスは、標準のiris-community:latest-emベースから始まる、マルチステージのDockerfileに従います。主なステップは次のとおりです:
1. 構成内のコンポーネントを無効にする
iris.cpfにて、WebServer、System Management Portal、および Ensemble を停止します。
2. IRIS内部から未使用パッケージを削除する
IRISセッション内でのObjectScriptの使用:
- 以下のパッケージを削除すること:
%SYS.ML,DeepSee,Interop,OAuth2,Net,Report。 - 必須のシステム・ライブラリのみを残すこと(例:
%Library,%SQL,%SYSTEM).
3. スタブクラス
必要となる場合、一部必須のクラス(例:起動時など)は、最小限のノーオペレーション実装に置き換えられます。
4. データベースのクリーンアップ
主要データベースをコンパクト化し、デフラグメント化してサイズを削減します。
5. ファイルシステムのクリーンアップ
以下の項目を削除すること:
- 開発ツール
- WebスタックおよびCSP
- 相互運用性ライブラリ
- Python/Javaサポート
- ロケールデータ、ログ、テンポラリ・ファイル、ODBC/JDBCドライバー
6. 掃除内容を新しいUbuntuベースにコピーする
最終的なイメージはubuntu:24.04をベースに構築されており、必要なファイルとツールのみを含み、PID 1としてtiniを使用しております。
結果
結果のイメージは、おおよそ以下のようになります:
- 圧縮サイズ: 約144~148 MB
- 非圧縮時のディスク使用量: 約570~580 MB
- SQL機能:
sqlalchemy-irisテストスイートによる検証済み (619件通過、912件スキップ、0件失敗)
これにより、以下の用途に非常に適しています:
- 最小限のSQLサービス
- 軽量な開発/テスト用コンテナ
- 組み込みまたはエッジ展開シナリオ
- ステートレスな水平スケーラブルアーキテクチャ
重要な制限にてういて
- 管理ポータルおよびWebサービスは含まれません CSP/Webスタック全体が削除されます。
- 相互運用性、DeepSee、iKnow、機械学習は含まれません これらのサブシステムは明示的に削除されます。
- 内部サポートおよび外部サポートは提供されません InterSystemsはこのイメージについていかなる保証もいたしません。互換性およびアップグレード動作は未定義となります。
- 将来のIRISバージョンでは起動要件が変更される場合があります 削除されたパッケージやファイルへの内部依存関係により、将来のバージョンがこのアプローチで動作しなくなる可能性があります。
結論
IRIS Lightは、InterSystems IRIS向けの効率的でコミュニティ主導のDockerイメージであり、データベース中心のユースケースにおいてサイズと複雑さを大幅に削減します。公式にはサポートされていませんが、実験やラピッドプロトタイピングの基盤を提供し、完全なIRIS機能が不要な場面において有用です。
ユーザーの皆様は、Dockerfile を確認し、ご自身のニーズに合わせて適宜調整し、コアプラットフォーム機能の削除に伴う影響を理解されることをおすすめします。
ユーザーの皆様は、ご自身の運用上およびセキュリティ上の制約に合わせて、Dockerfileをさらにカスタマイズされることをおすすめします。ビルドプロセス全体は、公開されているDockerベースイメージのみを使用して、透明性が高く再現可能です。
プロジェクトは次のリンクからご利用いただけます: here
IRIS Community LightのDockerイメージは 次のリンクからご利用いただけます: Docker Hub