1

我构建了自己的 docker 镜像并在 Heroku 上运行它们。这很好用,这里有一个示例 Docker 文件:

FROM node:14-alpine
WORKDIR /app
COPY ./ncc/web ./
CMD node ./index.js

问题是我还想在运行节点时使用 Jemalloc 进行更好的内存管理。我过去在使用普通节点 dynos(不是 docker 图像)时使用过这个 Jemalloc buildpack,它运行良好:

https://github.com/gaffneyc/heroku-buildpack-jemalloc

如果我理解正确,但是 buildpacks 和 docker 图像不兼容?所以这个buildpack不会自动从我的图像中获得吗?

有没有办法让 buildpack 在我的图像中运行?

如果没有,有人知道我如何在我的实例中安装和使用 jemalloc 吗?

4

1 回答 1

1

我认为Cloud Native Buildpacks是您所需要的。Cloud Native Buildpacks 生成 Docker 映像作为输出,这意味着您甚至不需要Dockerfile.

heroku/buildpacks:18CNB 构建器映像包含构建包heroku/nodejs。但是您需要手动添加 jemalloc buildpack。由于 jemalloc 是旧式构建包(即不是 Cloud Naitve),因此您需要使用CNB shim。通过这种方式,您可以使用以下 URL 引用 buildpack:

https://buildpack-registry.heroku.com/cnb/gaffneyc/jemalloc

综上所述,安装了 Pack CLI 后,您应该能够运行:

$ pack build --builder heroku/buildpacks:18 --buildpack heroku/nodejs,https://buildpack-registry.heroku.com/cnb/gaffneyc/jemalloc my app
于 2020-12-23T00:05:07.490 回答