作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用例是 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/
我是一名优秀的程序员,十分优秀!