MATLAB スタンドアロン アプリケーションの Docker イメージへのパッケージ化
サポートされるプラットフォーム: Linux® のみ。
この例では、MATLAB® スタンドアロン パッケージを Docker® イメージにパッケージ化する方法を説明します。
このオプションは、すべての依存関係を含む標準化された形式でのアプリケーションの配布、またはオーケストレーターでのバッチ ジョブの実行を行う開発者に最適です。HTTP/HTTPS エンドポイントを提供するマイクロサービスの Docker イメージを作成するには、マイクロサービスの Docker イメージの作成 (MATLAB Compiler SDK)を参照してください。
前提条件
ターミナルで「
docker
」と入力し、Linux マシンに Docker がインストールされていることを確認します。Docker がインストールされていない場合は、Docker の Web サイトの指示に従って、Docker のインストールと設定を行うことができます。システム ターミナルに次を入力して、Docker インストールをテストします。
Docker インストールが正常に動作している場合、次のメッセージが表示されます。docker run hello-world
Hello from Docker! This message shows that your installation appears to be working correctly.
MATLAB Runtime インストーラーがマシン上で使用可能であることを確認します。その存在を確認するには、MATLAB コマンド プロンプトで関数
compiler.runtime.download
を実行します。マシンに既にインストーラーが存在する場合、この関数はその場所を返します。存在しない場合は、MATLAB のバージョンおよびアップデート レベルが一致する MATLAB Runtime インストーラーを、コマンドの実行場所からダウンロードします。使用しているコンピューターがインターネットに接続していない場合、インターネットに接続しているコンピューターから MATLAB Runtime インストーラーをダウンロードする必要があります。MATLAB Runtime インストーラーをダウンロードした後、オフライン コンピューターにそのインストーラーを移す必要があります。インストーラーは MathWorks の Web サイトからダウンロードできます。
https://www.mathworks.com/products/compiler/matlab-runtime.html
MATLAB での関数の作成
mymagic
という名前の MATLAB 関数を作成し、mymagic.m
として保存します。
function mymagic(x)
y = magic(x);
disp(y)
MATLAB コマンド プロンプトでこの関数をテストします。
mymagic(5)
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.standaloneApplication
を使用して、関数 mymagic
をスタンドアロン アプリケーションにパッケージ化します。
res = compiler.build.standaloneApplication('mymagic.m','TreatInputsAsNumeric',true)
res = Results with properties: BuildType: 'standaloneApplication' Files: {3×1 cell} Options: [1×1 compiler.build.StandaloneApplicationOptions]
MATLAB コマンド プロンプトで返される Results
オブジェクト res
には、ビルドに関する情報が含まれています。
ビルドが完了すると、この関数は mymagicstandaloneApplication
という名前のフォルダーを現在のディレクトリに作成し、スタンドアロン アプリケーションを保存します。
スタンドアロン アプリケーションの Docker イメージへのパッケージ化
DockerOptions
オブジェクトの作成
Docker イメージを作成する前に、関数 compiler.package.DockerOptions
を使用して DockerOptions
オブジェクトを作成し、Results
オブジェクト res
とイメージ名 mymagic-standalone-app
を入力引数として渡します。関数 compiler.package.DockerOptions
を使うと、Docker イメージのパッケージ化をカスタマイズできます。
opts = compiler.package.DockerOptions(res,'ImageName','mymagic-standalone-app')
opts = DockerOptions with properties: EntryPoint: 'mymagic' AdditionalInstructions: {} AdditionalPackages: {} ExecuteDockerBuild: on ImageName: 'mymagic-standalone-app' DockerContext: './mymagic-standalone-appdocker'
Docker イメージの作成
関数 compiler.package.docker
を使用して Docker イメージを作成し、Results
オブジェクト res
と DockerOptions
オブジェクト opts
を入力引数として渡します。
compiler.package.docker(res,'Options',opts)
Generating Runtime Image Cleaning MATLAB Runtime installer location. It may take several minutes... Copying MATLAB Runtime installer. It may take several minutes... ... ... ... Successfully built 6501fa2bc057 Successfully tagged mymagic-standalone-app:latest DOCKER CONTEXT LOCATION: /home/user/MATLAB/work/mymagic-standalone-appdocker SAMPLE DOCKER RUN COMMAND: docker run --rm -e "DISPLAY=:0" -v /tmp/.X11-unix:/tmp/.X11-unix mymagic-standalone-app
パッケージ化が完了すると、この関数は mymagic-standalone-appdocker
という名前のフォルダーを現在の作業ディレクトリに作成します。このフォルダーは Docker コンテキストであり、"Dockerfile" が含まれています。関数 compiler.package.docker
は Docker コンテキストの場所と、サンプルの Docker 実行コマンドも返します。サンプルの Docker 実行コマンドを使用して、イメージが正しく実行されるかどうかをテストできます。アプリケーションで入力引数が必要な場合は、入力引数をサンプル コマンドに追加します。
パッケージ化の処理中に、MATLAB Runtime に必要な部分が親 Docker イメージとしてパッケージ化され、スタンドアロン アプリケーションが子 Docker イメージとしてパッケージ化されます。
Docker イメージのテスト
Linux ターミナルを開き、Docker コンテキストのフォルダーに移動します。Docker イメージのリストに mymagic-standalone-app
Docker イメージがあることを確認します。
$ docker images |
REPOSITORY TAG IMAGE ID CREATED SIZE
mymagic-standalone-app latest 6501fa2bc057 23 seconds ago 1.03GB
matlabruntime/r2024b/update0/4000000000000000 latest c6eb5ba4ae69 24 hours ago 1.03GB
mymagic-standalone-app
Docker イメージが Docker イメージのリストにあることを確認した後、入力引数 5
を指定してサンプルの実行コマンドを実行します。
$ docker run --rm -e "DISPLAY=:0" -v /tmp/.X11-unix:/tmp/.X11-unix mymagic-standalone-app 5 |
No protocol specified out = 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
スタンドアロン アプリケーションはパッケージ化され、Docker イメージとして実行できるようになりました。
メモ
プロットまたはグラフィックスを生成するアプリケーションを実行する際には、Docker イメージを実行する前に、+
オプションを使用して xhost
プログラムを実行します。
xhost +
xhost
プログラムは X Display Server へのアクセスを制御することにより、プロットとグラフィックスを表示できるようにします。+
オプションは、誰でも X Display Server にアクセスできることを表しています。プロットやグラフィックスを生成しないアプリケーションを実行する前に、+
オプションを使用して xhost
プログラムを実行すると、[No protocol specified
] というメッセージは表示されなくなります。Docker イメージの共有
Docker イメージはさまざまな方法で共有できます。
イメージを Docker の中央レジストリ DockerHub にプッシュするか、プライベート レジストリにプッシュします。これが最も一般的なワークフローです。
イメージを tar アーカイブとして保存するか、他のユーザーと共有します。このワークフローは、ただちにテストを行う場合に適しています。
イメージを Docker の中央レジストリまたはプライベート レジストリにプッシュする方法の詳細については、Docker のドキュメンテーションを参照してください。
Docker イメージを tar アーカイブとして保存
Docker イメージを tar アーカイブとして保存するには、Linux ターミナルを開き、Docker コンテキストのフォルダーに移動して次を入力します。
$ docker save mymagic-standalone-app -o mymagic-standalone-app.tar |
現在のフォルダーに mymagic-standalone-app.tar
という名前のファイルが作成されます。tarball を他のユーザーと共有する前に、chmod
を使用して適切な権限を設定します。
tar アーカイブからの Docker イメージの読み込み
エンドユーザーのマシン上で tarball に含まれるイメージを読み込み、実行します。
$ docker load --input mymagic-standalone-app.tar |
イメージが読み込まれたことを確認します。
$ docker images |
Docker イメージの実行
$ xhost + $ docker run --rm -e "DISPLAY=:0" -v /tmp/.X11-unix:/tmp/.X11-unix mymagic-standalone-app 5 |
参考
compiler.package.docker
| compiler.package.DockerOptions
| compiler.build.standaloneApplication
| compiler.runtime.download
関連するトピック
- マイクロサービスの Docker イメージの作成 (MATLAB Compiler SDK)