创建微服务 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 镜像。
前提条件
验证您是否已在开发计算机上安装了 MATLAB Compiler SDK。
通过在 MATLAB 命令行窗口中键入
[~,msg] = system('docker version')
,验证您是否已在开发计算机上安装并配置了 Docker。注意
如果您使用的是 WSL,请改为键入
[~,msg] = system('wsl docker version')
。如果您尚未安装 Docker,请按照 Docker 网站上的说明安装并设置 Docker。
docs.docker.com/engine/install/
要在 Windows 上构建微服务镜像,您必须安装 Docker Desktop 或在 Windows Subsystem for Linux v2 (WSL2) 上安装 Docker。
要安装 Docker Desktop,请参阅
docs.docker.com/desktop/setup/install/windows-install//
。要在 WSL2 上安装 Docker,请参阅
https://www.mathworks.com/matlabcentral/answers/1758410-how-do-i-install-docker-on-wsl2
。
如果您使用的计算机未连接到 Internet,则您必须从连接到 Internet 的计算机下载 Linux 版的 MATLAB Runtime 安装程序,再将该安装程序传输到离线计算机。然后,运行命令
,其中compiler.runtime.createInstallerDockerImage
(filepath)filepath
是传输的 MATLAB Runtime 安装程序存档的路径。您可以从 MathWorks® 网站下载安装程序。
https://www.mathworks.com/products/compiler/matlab-runtime.html
注意
有些可部署存档(例如 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
。
在 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
在 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
命令通过端口 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"要停止服务,请使用以下命令显示容器 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 函数签名 (MATLAB Production Server)