Main Content

MATLAB スタンドアロン アプリケーションの Docker イメージへのパッケージ化

サポートされるプラットフォーム: Linux® のみ。

この例では、MATLAB® スタンドアロン パッケージを Docker® イメージにパッケージ化する方法を説明します。

このオプションは、すべての依存関係を含む標準化された形式でのアプリケーションの配布、またはオーケストレーターでのバッチ ジョブの実行を行う開発者に最適です。HTTP/HTTPS エンドポイントを提供するマイクロサービスの Docker イメージを作成するには、Create Microservice Docker Image (MATLAB Compiler SDK)を参照してください。

前提条件

  1. ターミナルで「docker」と入力し、Linux マシンに Docker がインストールされていることを確認します。Docker がインストールされていない場合は、Docker の Web サイトの指示に従って、Docker のインストールと設定を行うことができます。

    https://docs.docker.com/engine/install/

  2. システム ターミナルに次を入力して、Docker インストールをテストします。

    docker run hello-world
    Docker インストールが正常に動作している場合、次のメッセージが表示されます。
    Hello from Docker!
    This message shows that your installation appears to be working correctly.

  3. 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]

ビルドが完了すると、この関数は mymagicstandaloneApplication という名前のフォルダーを現在のディレクトリに作成し、スタンドアロン アプリケーションを保存します。MATLAB コマンド プロンプトで返される Results オブジェクト res には、ビルドに関する情報が含まれています。

スタンドアロン アプリケーションの 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'
    ExecuteDockerBuild: on
             ImageName: 'mymagic-standalone-app'
         DockerContext: './mymagic-standalone-appdocker'

Docker イメージの作成

関数 compiler.package.docker を使用して Docker イメージを作成し、Results オブジェクト resDockerOptions オブジェクト 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/r2022b/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

参考

| | |

関連するトピック