主要内容

本页采用了机器翻译。点击此处可查看英文原文。

使用自定义基础层创建微服务

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

此示例演示了如何使用自定义基础镜像创建名为 Docker® 的微服务镜像。创建自定义基础层后,您可以将首选的 Linux 版本或其他操作系统作为基础,从而运行命令或安装其他依赖项。

Docker 容器镜像由多个层组成。在此示例中,您将创建三个层,每个层都包含一组基于前一层构建的文件系统更改。

  1. 自定义基础层(您选择的操作系统)

  2. 次级层 (MATLAB® Runtime)

  3. 应用层(您的微服务)

前提条件

注意

有些可部署存档(例如 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

您还可以安装其他依赖项,以满足部署的各项要求。

 Example Dockerfile.customdeps

这些软件包来自 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

  1. 在系统命令行中,运行 mirror-micro 微服务镜像,并将其部署到 Docker 中。

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

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

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

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

    http://hostname:9900/api/health

    注意

    如果 Docker 在浏览器所在的计算机上运行,您可以使用 localhost 作为主机名。如果您正在使用 Docker Desktop,则可以通过 host.docker.internal 访问该容器。

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

    "status:  ok"
  3. 测试正在运行的服务。在终端中,使用 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"

  4. 要停止服务,请使用以下命令显示容器 ID。

    docker ps
    CONTAINER 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

另请参阅

| |

主题