gpt4 book ai didi

javascript - 如何在不发布的情况下在 lerna monorepo 中构建 docker 镜像

转载 作者:行者123 更新时间:2023-12-05 00:23:58 24 4
gpt4 key购买 nike

用例是 Lerna monorepos 中的分支构建和部署。

问题是 Lerna monorepos 要么在 NPM 中提升依赖项,要么使用 yarn 工作空间来收集工作空间/monorepo 的 node_modules 文件夹中的所有依赖项。这意味着由于 docker build contexts 的工作方式,在子文件夹中构建 Dockerfile 时将无法访问它们。

我想这里需要的是一种“较低”(与提升相反)功能,用于在运行 docker build 之前将包依赖项拉入 Docker/package.json 项目的 node_modules 中。

问题是,有没有人有更好的主意,或者知道已经存在的方法来做到这一点?

最佳答案

对于我自己的项目,解决方案是使用docker BuildKit首先构建所有工作区,然后为项目工作区构建一个 docker 镜像,以重用以前构建的文件。
详细地说,您可以在 docker 文件中复制带有 yarn 锁的顶部 package.json,然后挑选所需工作区的 package.json。
然后运行 ​​yarn install 和 yarn build 让一切正常。
这是我的项目:

# base image
FROM @myscope/base:latest as base

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY ["package.json","yarn.lock", "./"]
COPY ./packages/server/package.json ./packages/server/
COPY ./packages/shared/package.json ./packages/shared/
COPY ./packages/app/package.json ./packages/app/

RUN yarn install --frozen-lockfile --non-interactive --production=false --ignore-scripts
COPY . /app
RUN yarn build



FROM nodejs:14.15 as serverapp

WORKDIR /app

COPY ["package.json","yarn.lock", "./"]
COPY ./packages/server/package.json ./packages/server/
COPY ./packages/shared/package.json ./packages/shared/

RUN yarn install --frozen-lockfile --non-interactive --production=true --ignore-scripts

# copy artifact build from the 'build environment'
COPY --from=base /app/packages/shared/dist /app/packages/shared/dist

COPY ["./packages/server/", "./packages/server/"]

WORKDIR /app/packages/server
VOLUME ["/app/packages/server/logs", "/app/packages/server/uploads"]
EXPOSE $PORT
CMD ["yarn", "start"]
shared是一个私有(private)工作空间,它是 server 的依赖项。工作区。

关于javascript - 如何在不发布的情况下在 lerna monorepo 中构建 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59320343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com