このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
マイクロサービスの Docker イメージの作成
サポートされるプラットフォーム: Linux®、Windows®、macOS
この例では、マイクロサービスの Docker® イメージを作成する方法を説明します。MATLAB® Compiler SDK™ で作成されたマイクロサービスのイメージは、MATLAB コードにアクセスするための HTTP/HTTPS エンドポイントを提供します。
MATLAB 関数をデプロイ可能なコード アーカイブにパッケージ化し、アーカイブと最小限の MATLAB Runtime パッケージを含む Docker イメージを作成します。次に、Docker でイメージを実行し、MATLAB Production Server™ クライアント API を含む HTTP ライブラリがある任意のプログラミング言語を使用して、サービスへの呼び出しを行います。
このオプションは、MATLAB アルゴリズムまたは Simulink® シミュレーションを大規模なアプリケーション内にサービスとして取り込むか、または同期的なリクエスト/レスポンス バックエンド API サービスを提供したいと考えている開発者に最適です。スタンドアロン アプリケーションが含まれた Docker イメージを作成する場合は、MATLAB スタンドアロン アプリケーションの Docker イメージへのパッケージ化を参照してください。
前提条件
開発マシンに MATLAB Compiler SDK がインストールされていることを確認します。
MATLAB コマンド ウィンドウで「
[~,msg] = system('docker version')
」と入力して、開発マシンで Docker がインストールおよび構成されていることを確認します。メモ
WSL を使用する場合は、代わりに
[~,msg] = system('wsl docker version')
を使用します。Docker がインストールされていない場合は、Docker の Web サイトの指示に従って、Docker のインストールと設定を行います。
docs.docker.com/engine/install/
Windows でマイクロサービスのイメージをビルドするには、Docker Desktop または Docker on Windows Subsystem for Linux v2 (WSL2) をインストールする必要があります。
Docker Desktop をインストールする場合は、
docs.docker.com/desktop/install/windows-install/
を参照してください。Docker on WSL2 をインストールする場合は、
https://www.mathworks.com/matlabcentral/answers/1758410-how-do-i-install-docker-on-wsl2
を参照してください。
使用しているコンピューターがインターネットに接続していない場合、インターネットに接続しているコンピューターから Linux 用の MATLAB Runtime インストーラーをダウンロードし、そのインストーラーをオフラインのコンピューターに移す必要があります。次に、コマンド
を実行します。ここで、compiler.runtime.createInstallerDockerImage
(filepath)filepath
は移した MATLAB Runtime インストーラー アーカイブのパスです。インストーラーは MathWorks® の Web サイトからダウンロードできます。
https://www.mathworks.com/products/compiler/matlab-runtime.html
メモ
一部のデプロイ可能なアーカイブ (Simulink Compiler™ のアーティファクトなど) はクロスプラットフォーム互換ではなく、Docker で使用する Linux でビルドする必要があります。詳細については、制限を参照してください。
MATLAB 関数の作成
MATLAB で、パッケージ化する MATLAB プログラムを調べます。
この例では、以下のコードを使用して、mymagic.m
という名前の関数を作成します。
function y = mymagic(x)
y = magic(x);
MATLAB コマンド プロンプトで、mymagic(5)
と入力します。
出力は 5 行 5 列の魔方陣行列になります。
ans = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
デプロイ可能なアーカイブの作成
関数 compiler.build.productionServerArchive
を使用して、関数 mymagic
をコード アーカイブにパッケージ化します。
compiler.build
コマンドで名前と値の引数を使用して、追加オプションを指定します。詳細については、compiler.build.productionServerArchive
を参照してください。
オプションで、クライアントが MATLAB 関数を使用するときに役立つ関数シグネチャ ファイルを追加できます。詳細については、JSON での MATLAB 関数シグネチャを参照してください。
mpsResults = compiler.build.productionServerArchive('mymagic.m',... 'FunctionSignatures','mymagicFunctionSignatures.json',... 'ArchiveName','magicarchive','Verbose','on')
mpsResults = Results with properties: BuildType: 'productionServerArchive' Files: {'/home/mluser/Work/magicarchiveproductionServerArchive/magicarchive.ctf'} IncludedSupportPackages: {} Options: [1×1 compiler.build.ProductionServerArchiveOptions]
compiler.build.Results
オブジェクト mpsResults
には、ビルド タイプ、生成ファイル、含まれるサポート パッケージ、およびビルド オプションに関する情報が含まれています。
ビルドが完了すると、この関数は、デプロイ可能なアーカイブが含まれる現在のディレクトリに magicarchiveproductionServerArchive
という名前のフォルダーを作成します。
Docker イメージへのデプロイ可能なアーカイブのパッケージ化
作成した mpsResults
オブジェクトを使用してマイクロサービスの Docker イメージをビルドします。
compiler.build
コマンドで名前と値の引数を使用して、追加オプションを指定します。詳細については、compiler.package.microserviceDockerImage
を参照してください。
compiler.package.microserviceDockerImage(mpsResults,'ImageName','micro-magic')
この関数により、micro-magicmicroserviceDockerImage
という名前のフォルダー内に以下のファイルが生成されます。
applicationFilesForMATLABCompiler/magicarchive.ctf
— デプロイ可能なコード アーカイブ ファイル。Dockerfile
— 実行時オプションを指定する Docker ファイル。GettingStarted.txt
— デプロイ情報が含まれるテキスト ファイル。
Docker イメージのテスト
メモ
Docker が WSL2 セッションで実行されている場合は、以下のコマンドの前に wsl
を付けてください。
Linux ターミナルで、
micro-magic
イメージが Docker イメージのリストに含まれていることを確認します。docker images
REPOSITORY TAG IMAGE ID CREATED SIZE micro-magic latest 4401fa2bc057 23 seconds ago 1.42GB matlabruntime/r2024a/update0/4200000000000000 latest 5259656e4a32 24 hours ago 1.42GB
Docker で
micro-magic
マイクロサービス イメージを実行します。docker run --rm -p 9900:9910 micro-magic
ポート 9910 は、Docker コンテナー内でマイクロサービスによって公開される既定のポートです。ホスト マシン上の任意の使用可能なポートにマッピングできます。この例では、ポート 9900 にマッピングしています。
Docker コマンドで追加オプションを指定できます。オプションの完全なリストについては、マイクロサービスのコマンド引数を参照してください。
コンテナーが Docker で実行されたら、Web ブラウザーで次の URL を開いてサービスのステータスを確認できます。
http://hostname:9900/api/health
メモ
Docker がブラウザーと同じマシンで実行されている場合は、ホスト名として
localhost
を使用します。サービスでリクエストを受け取る準備ができている場合は、次のメッセージが表示されます。
"status: ok"
実行されているサービスをテストします。ターミナルで、
curl
コマンドを使用し、入力引数4
を指定してポート 9900 を介して JSON クエリをサービスに送信します。JSON リクエストの作成の詳細については、MATLAB データ型の JSON 表現 (MATLAB Production Server)を参照してください。curl -v -H Content-Type:application/json -d '{"nargout":1,"rhs":[4]}' \ "http://
hostname
:9900/magicarchive/mymagic"出力は以下のようになります。
{"lhs":[{"mwdata":[16,5,9,4,2,11,7,14,3,10,6,15,13,8,12,1],\ "mwsize":[4,4],"mwtype":"double"}]}
メモ
Windows で
curl
を使用するには、以下の構文を使用します。curl -v -H Content-Type:application/json -d "{\"nargout\":1,\"rhs\":[4]}" \ "http://
hostname
:9900/magicarchive/mymagic"サービスを停止するには、以下のコマンドを使用してコンテナー ID を表示します。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES df7710d69bf0 micro-magic "/opt/matlabruntime/…" 6 minutes ago Up 6 minutes 0.0.0.0:9900->9910/tcp epic_herschel
示されたコンテナー ID を使用してサービスを停止します。
docker stop df7710d69bf0
Docker イメージの共有
Docker イメージはさまざまな方法で共有できます。
イメージを Docker の中央レジストリ Docker Hub にプッシュするか、プライベート レジストリにプッシュします。これが最も一般的なワークフローです。
イメージを tar アーカイブとして保存するか、他のユーザーと共有します。このワークフローは、ただちにテストを行う場合に適しています。
イメージを Docker Hub またはプライベート レジストリにプッシュする方法の詳細については、Docker のドキュメンテーションを参照してください。
Docker イメージを tar アーカイブとして保存
Docker イメージを tar アーカイブとして保存するには、システム コマンド ウィンドウを開き、Docker コンテキストのフォルダーに移動して次を入力します。
docker save micro-magic -o micro-magic.tar
このコマンドにより、現在のフォルダー内に micro-magic.tar
という名前のファイルが作成されます。tarball を他のユーザーと共有する前に、(chmod
を使用するなどして) 適切な権限を設定します。
tar アーカイブからの Docker イメージの読み込み
エンド ユーザーのマシン上で tarball に含まれるイメージを読み込みます。
docker load --input micro-magic.tar
イメージが読み込まれたことを確認します。
docker images
Docker イメージの実行
docker run --rm -p 9900:9910 micro-magic
参考
compiler.package.microserviceDockerImage
| compiler.build.productionServerArchive
関連するトピック
- マイクロサービスのコマンド引数
- MATLAB Production Server 用のデプロイ可能なアーカイブの作成
- クライアント プログラミング (MATLAB Production Server)
- MATLAB スタンドアロン アプリケーションの Docker イメージへのパッケージ化
- MATLAB データ型の JSON 表現 (MATLAB Production Server)
- JSON での MATLAB 関数シグネチャ