使用自定义基础层创建微服务
支持的平台:Windows®、Linux®、macOS
此示例演示了如何使用自定义基础镜像创建名为 Docker® 的微服务镜像。创建自定义基础层后,您可以将首选的 Linux 版本或其他操作系统作为基础,从而运行命令或安装其他依赖项。
Docker 容器镜像由多个层组成。在此示例中,您将创建三个层,每个层都包含一组基于前一层构建的文件系统更改。
自定义基础层(您选择的操作系统)
次级层 (MATLAB® Runtime)
应用层(您的微服务)
前提条件
验证您是否已在开发计算机上安装了 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。
您正在使用的计算机必须连接到互联网。
注意
有些可部署存档(例如 Simulink® Compiler™ 工件)并非跨平台兼容,必须在 Linux 上构建才能与 Docker 一起使用。有关详细信息,请参阅MATLAB Compiler 的限制。
使用 compiler.build.productionServerArchive 创建生产服务器存档
在 MATLAB 中,找到您想要作为微服务部署的 MATLAB 函数。在此示例中,请使用以下代码创建函数 mirror.m。
function out = mirror(in)
out = in;使用 compiler.build.productionServerArchive 创建生产服务器的存档文件。
buildResults = compiler.build.productionServerArchive("mirror.m","Verbose",true);
使用 Docker 构建自定义基础层
您可以使用 Dockerfile 自定义基础镜像。
在此示例中,请创建一个名为 Dockerfile.customdeps 的新文件。该文件应指定 Linux 发行版,并安装 MATLAB Runtime 所需的所有依赖项。
您可以在 Dockerfile 中添加命令,以自定义基础镜像的行为。例如,在 apt 配置文件中添加代理信息。
RUN echo 'Acquire::http::Proxy "http://yourproxyaddress:proxyport";' >> /etc/apt/apt.conf您还可以安装其他依赖项,以满足部署的各项要求。
这些软件包来自 https://github.com/mathworks-ref-arch/container-images/tree/main/matlab-runtime-deps/,适用于 Ubuntu 24.04。如果您的内部操作系统镜像源自其他任何 Linux 发行版,则必须重新创建该操作系统的依赖项列表。
在 MATLAB 命令行窗口中,使用 Docker 和您创建的 Dockerfile 构建自定义基础镜像。
depsImageName = "mycompanybase:r2024b"; system("docker build -f Dockerfile.customdeps -t " + depsImageName + " .");
注意
如果您使用的是 WSL,请输入 wsl docker build。
使用 MATLAB Runtime 创建二级图层
创建一个名为 MATLAB Runtime Docker 的映像层,该层使用您创建的自定义基础层。使用名称-值参量指定基础图层图像和 MATLAB Runtime 图像名称。
runtimeImageName = "custom-matlabruntime:r2024b"; compiler.runtime.createDockerImage(buildResults, ... "BaseImage",depsImageName, ... "ImageName",runtimeImageName)
注意
如果您无法访问 Docker 存储库,则必须先运行 compiler.runtime.createInstallerDockerImage,并指定 Linux MATLAB Runtime 安装程序的路径。
通过打包 MATLAB 微服务来创建应用层
为生产服务器的存档创建一个名为 Docker 的微服务镜像。请指定您创建的 MATLAB Runtime Docker 镜像的名称,作为 compiler.package.microserviceDockerImage 函数的输入。
compiler.package.microserviceDockerImage(buildResults, ... "ImageName","mirror-micro","RuntimeImage",runtimeImageName);
您可以使用 Docker 部署微服务镜像,并使用任何具备 HTTP 库的编程语言调用该服务,包括 MATLAB Production Server™ 客户端 API。
有关将您的镜像推送到 Docker Hub 或您的私有注册表的详细信息,请查阅 Docker 文档。
测试 Docker 镜像
注意
如果 Docker 在 WSL2 会话中运行,请在以下命令前面加上 wsl。
在系统命令行中,运行
mirror-micro微服务镜像,并将其部署到 Docker 中。docker run --rm -p 9900:9910 mirror-micro端口 9910 是 Docker 容器内微服务公开的默认端口。您可以将微服务映射到主机上的任何可用端口。对于此示例,微服务映射到端口 9900。
您可以在 Docker 命令中指定其他选项。有关完整选项列表,请参阅微服务命令参量。
当容器在 Docker 中运行后,您可以通过在 Web 浏览器中打开以下 URL 来检查服务的状态:
http://hostname:9900/api/health
注意
如果 Docker 在浏览器所在的计算机上运行,您可以使用
localhost作为主机名。如果您正在使用 Docker Desktop,则可以通过host.docker.internal访问该容器。如果服务已准备就绪,可以接收请求,您将看到以下消息:
"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/mirror/mirror"输出与输入相同。
{"lhs":[{"mwdata":[4],"mwsize":[1,1],"mwtype":"double"}]}注意
要在 Windows 上使用
curl,请使用以下语法:curl -v -H Content-Type:application/json -d "{\"nargout\":1,\"rhs\":[4]}" "http://<hostname>:9900/mirror/mirror"要停止服务,请使用以下命令显示容器 ID。
docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 065546e98708 mirror-micro "/opt/matlabruntime/…" 4 minutes ago Up 4 minutes 0.0.0.0:9900->9910/tcp silly_slaw使用指定的容器 ID 停止服务。
docker stop 065546e98708
另请参阅
compiler.build.productionServerArchive | compiler.runtime.createDockerImage | compiler.package.microserviceDockerImage
