主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

MATLAB 独立应用程序打包为 Docker 镜像

支持的平台:仅限 Linux®

此示例说明了如何将 MATLAB® 独立应用程序打包为 Docker® 镜像。

此选项最适合希望以包含所有依赖项的标准化格式分发应用程序或在编排器中运行批处理作业的开发人员。要创建提供 HTTP/HTTPS 端点的微服务 Docker 镜像,请参阅创建微服务 Docker 镜像 (MATLAB Compiler SDK)

前提条件

  1. 通过在终端中键入 docker 来验证您是否已在 Linux 计算机上安装了 Docker。如果您尚未安装 Docker,可以按照 Docker 网站上的说明安装并设置 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 安装程序。

    如果您使用的计算机未连接到 Internet,则您必须从连接到 Internet 的计算机下载 MATLAB Runtime 安装程序。在下载 MATLAB Runtime 安装程序后,您需要将该安装程序传输到离线计算机。您可以从 MathWorks 网站下载该安装程序。

    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]
  RuntimeDependencies: [1×1 compiler.runtime.Dependencies]

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 对象 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 上下文并且包含 Dockerfilecompiler.package.docker 函数还返回 Docker 上下文的位置和一个示例 Docker 运行命令。您可以使用示例 Docker 运行命令来测试您的镜像是否正确执行。如果应用程序要求使用输入参量,请将它们追加到示例命令。

在打包过程中,MATLAB Runtime 必需的位被打包为父级 Docker 镜像,独立应用程序被打包为子级 Docker 镜像。

测试 Docker 镜像

打开一个 Linux 终端并导航到 Docker 上下文文件夹。验证 mymagic-standalone-app Docker 镜像是否在 Docker 镜像列表中列出。

$ docker images
REPOSITORY                                      TAG           IMAGE ID            CREATED             SIZE
mymagic-standalone-app                          latest        6501fa2bc057        23 seconds ago      1.03GB
matlabruntime/r2025a/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 显示服务器的访问,从而使得绘图和图形能够显示。+ 选项指示所有人都能够访问 X 显示服务器。在运行不生成绘图或图形的应用程序之前,如果您先使用 + 选项运行 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

另请参阅

| | |

主题