在 Docker 中运行
在 Docker 中运行路由容器镜像
本指南提供了以下运行示例:Apollo 路由核心在 Docker 中的容器镜像:
- 使用默认配置运行基本示例。
- 自定义配置以覆盖默认配置。
- 调试您的容器化路由器。
- 为您的 router 手动指定 supergraph。
- 构建您自己的 router Docker 镜像。
有关文档的信息。docker run
命令是本指南中示例的有用参考。
要使用的确切镜像版本取决于您希望使用哪个版本。在以下示例中,将<image version>
替换为您选择的版本,例如v1.32.0
。
ⓘ 注意
Apollo 路由核心的源代码及其所有发布版本都在弹性许可 v2.0 (ELv2) 许可下提供。
在 Docker 中运行路由器的基本示例
要运行 router ,您的 Docker 容器必须设置APOLLO_GRAPH_REF
和APOLLO_KEY
环境变量,分别设置为您的graph ref和 API 密钥。
以下是一个在 Docker 中运行 router 镜像的基本示例。确保将<router-image-version>
替换为您想要使用的版本,例如v1.32.0
。
docker run -p 4000:4000 \--env APOLLO_GRAPH_REF="<your-graph-ref>" \--env APOLLO_KEY="<your-graph-api-key>" \--rm \ghcr.io/apollographql/router:<router-image-version>
此命令从Apollo下载您的supergraph模式,并使用默认配置,该配置在端口4000上监听连接。
对于更复杂的配置,例如覆盖子图 URL或传播标题,请参阅路由器配置。
覆盖配置
Apollo默认的Docker镜像包含一个基本路由器配置。在容器内部,此文件位于/dist/config/router.yaml
。
如果您想覆盖默认配置,保留默认配置的某些方面是很重要的。特别是,路由器绑定和监听特殊地址0.0.0.0(适用于所有接口)通常很重要,以确保它在外部可访问的网络接口上暴露。没有此配置,路由器将只监听localhost
您可以从主机环境提供自己的配置到路由器,方法是将您的配置挂载到/dist/config/router.yaml,如下所示:
docker run -p 4000:4000 \--env APOLLO_GRAPH_REF="<your-graph-ref>" \--env APOLLO_KEY="<your-graph-api-key>" \--mount "type=bind,source=/home/user/router.yaml,target=/dist/config/router.yaml" \--rm \ghcr.io/apollographql/router:<router-image-version>
ⓘ 注意
本地和容器路径都必须指定为绝对路径。
在此示例中,我们将从主机系统(/home/user/router.yaml
)安装文件,以替代映像中提供的默认配置文件 /dist/config/router.yaml
。
向路由器二进制文件传递命令行参数
默认情况下,在发布的容器中运行的 router
命令没有设置任何可用的命令行选项。要设置这些选项,请将所需的选项附加到 docker run
命令。
例如,要使用 --log debug
选项启动 router,请使用以下带有附加选项的 docker run
命令:
docker run -p 4000:4000 \--env APOLLO_GRAPH_REF="<your-graph-ref>" \--env APOLLO_KEY="<your-graph-api-key>" \--rm \ghcr.io/apollographql/router:<router-image-version> --log debug
调试您的容器
您可以设置 entrypoint
来调试容器。
docker run -p 4000:4000 \--env APOLLO_GRAPH_REF="<your graph>" \--env APOLLO_KEY="<your key>" \--mount "type=bind,source=/router.yaml,target=/dist/config/router.yaml" \--rm \--interactive \--tty \--entrypoint=bash \ghcr.io/apollographql/router:<image version>dist# pwd/distdist# lsconfig router schemadist# exitexit
在此示例中,我们添加了交互和 tty 标志,并将映像的入口点更改为了 bash shell。
运行调试容器以调查内存问题
docker run -p 4000:4000 \--env APOLLO_GRAPH_REF="<your graph>" \--env APOLLO_KEY="<your key>" \--mount "type=bind,source=/data,target=/dist/data"--rm \ghcr.io/apollographql/router:<image version>-debug
router 在 heaptrack 的控制下运行。heaptrack 输出保存在 /data
目录中。可以使用 heaptrack_gui
或 heaptrack_print
直接分析输出来,也可以与 Apollo 支持共享。
指定超图
如果您不想通过 Apollo Uplink 自动更新您的超图,或者您无法从您的环境中访问 Apollo Uplink,您可以在 docker run
命令中手动指定您的超图详情:
docker run -p 4000:4000 \--mount "type=bind,source=/docker.graphql,target=/dist/schema/local.graphql" \--rm \ghcr.io/apollographql/router:<image version> -c config/router.yaml -s schema/local.graphql
在此示例中,我们必须将本地定义的超图安装到我们的映像中,并指定文件位置。它不需要安装在 /dist/schema 目录中,但这是一个合理的安装位置。我们必须指定配置文件的位置,因为覆盖默认参数将覆盖我们的默认配置文件位置。在这种情况下,由于我们不希望更改我们的 router 配置,但想要确保它被使用,我们只需指定默认配置的默认位置。
构建您自己的容器
ⓘ 注意
本部分针对熟悉工具(如 docker
和 git
)的开发商,他们想制作自己的 DIY 容器镜像。这里记录的脚本并非 router 产品的一部分,而是制作您自己的镜像的示例。
在 dockerfiles/diy
目录下,我们提供了一个脚本 build_docker_image.sh
,说明了如何从我们的发布压缩包、git提交哈希或标签构建自己的docker镜像。以下是使用方法:
% ./build_docker_image.sh -hUsage: build_docker_image.sh [-b [-r <repo>]] [-d] [<release>]-b build docker image from the default repo, if not present build from a released version-d build debug image, router will run under control of heaptrack-r build docker image from a specified repo, only valid with -b flag<release> a valid release. If [-b] is specified, this is optionalExample 1: Building HEAD from the repobuild_docker_image.sh -bExample 2: Building HEAD from a different repobuild_docker_image.sh -b -r /Users/anon/dev/routerExample 3: Building tag from the repobuild_docker_image.sh -b v0.9.1Example 4: Building commit hash from the repobuild_docker_image.sh -b 7f7d223f42af34fad35b898d976bc07d0f5440c5Example 5: Building tag v0.9.1 from the released versionbuild_docker_image.sh v0.9.1Example 6: Building a debug image with tag v0.9.1 from the released versionbuild_docker_image.sh -d v0.9.1
示例使用 debian:bullseye-slim 镜像 进行最终镜像构建。您可以根据自己的需求修改脚本以使用更适合您的镜像,但请注意,在使用 -d
标志时需谨慎,因为它假设存在可安装的 heaptrack
软件包。