主要内容

创建微服务 Docker 镜像

支持的平台:Linux®、Windows®macOS

此示例说明如何创建微服务 Docker® 镜像。通过 MATLAB® Compiler SDK™ 创建的微服务镜像提供一个可用于访问 MATLAB 代码的 HTTP/HTTPS 端点。

您可以先将 MATLAB 函数打包成可部署存档,然后创建包含该存档和最小 MATLAB Runtime 包的 Docker 镜像。之后,您可以在 Docker 中运行该镜像,并使用任何具有 HTTP 库的编程语言(包括 MATLAB Production Server™ 客户端 API)调用服务。

此选项最适合希望将 MATLAB 算法或 Simulink® 仿真作为服务嵌入到更大应用程序中的开发人员,或者希望提供同步请求-响应后端 API 服务的开发人员。要创建包含独立应用程序的 Docker 镜像,请参阅将 MATLAB 独立应用程序打包为 Docker 镜像

前提条件

注意

有些可部署存档(例如 Simulink Compiler™ 工件)并非跨平台兼容,必须在 Linux 上构建才能与 Docker 一起使用。有关详细信息,请参阅限制

创建 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 函数签名 (MATLAB Production Server)

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

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

  1. 在 Linux 终端中,确认您的 micro-magic 镜像在 Docker 镜像列表中。

    docker images
    REPOSITORY                                      TAG           IMAGE ID            CREATED             SIZE
    micro-magic                                     latest        4401fa2bc057        23 seconds ago      1.42GB
    matlabruntime/r2025b/update0/4200000000000000   latest        5259656e4a32        24 hours ago        1.42GB
  2. 在 Docker 中运行 micro-magic 微服务镜像。

    docker run --rm -p 9900:9910 micro-magic

    端口 9910 是 Docker 容器内微服务公开的默认端口。您可以将微服务映射到主机上的任何可用端口。对于此示例,微服务映射到端口 9900。

    您可以在 Docker 命令中指定其他选项。有关完整选项列表,请参阅微服务命令参量

  3. 当容器在 Docker 中运行后,您可以通过在 Web 浏览器中打开以下 URL 来检查服务的状态:

    http://hostname:9900/api/health

    注意

    如果 Docker 在浏览器所在的计算机上运行,您可以使用 localhost 作为主机名。

    如果服务已准备就绪,可以接收请求,您将看到以下消息:

    "status:  ok"
  4. 测试正在运行的服务。在终端中,使用 curl 命令通过端口 9900 向服务发送包含输入参量 4 的 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"

  5. 要停止服务,请使用以下命令显示容器 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

另请参阅

|

主题