Open findxc opened 3 years ago
这应该是近期 docker 相关的最后一篇了,这一切都是因为要优化下一个项目的镜像构建速度,用这个踩坑记录作为终章也挺合适的 hhh
是的,从一开始就不顺利,本地测试时,镜像构建一直卡在打包那里,等着等着就失败了,又看不到啥有效日志。
最后的最后,想起来,会不会是内存不足导致的打包失败。
经过大佬指点默默把 docker 的内存设置从默认的 2G 改为 4G ,再次构建,就成功了。
对于 yarn v1 安装私有仓库包,需要这样去装包: RUN yarn || yarn || yarn ,详见 Yarn install for private module failing - unexpected end of file · Issue #7521 · yarnpkg/yarn · GitHub 。
RUN yarn || yarn || yarn
凡是涉及到下载啥啥,如果发现很慢,就配置下国内源。
# 设置 npm 源 RUN npm config set registry https://registry.npm.taobao.org # 这里有常见的镜像地址 --> https://github.com/cnpm/binary-mirror-config/blob/master/package.json#L44 ENV npm_config_sharp_binary_host="https://npm.taobao.org/mirrors/sharp" ENV npm_config_sharp_libvips_binary_host="https://npm.taobao.org/mirrors/sharp-libvips" ENV npm_config_sentrycli_cdnurl="https://npm.taobao.org/mirrors/sentry-cli" # 设置 apk 源,如果有用到 apk 的话 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
在 node 镜像中,如果先设了 ENV NODE_ENV production ,然后再 RUN yarn ,就会只安装生产依赖,所以如果想安装全部依赖,要把 ENV NODE_ENV production 这一步放后面。
ENV NODE_ENV production
RUN yarn
RUN apk add --no-cache make
RUN yarn && yarn cache clean
rm -rf /var/lib/apt/lists/*
ARG 参数在 CMD 中读取不到,因为 ARG 是构建时,而 CMD 是运行时,CDM 只能读到环境变量。
并且使用 CMD ["npm", "run", "serve:${BUILD_ENV}"] 这种写法也是读不到值的,需要用 CMD npm run serve:${BUILD_ENV} 。
CMD ["npm", "run", "serve:${BUILD_ENV}"]
CMD npm run serve:${BUILD_ENV}
# docker build --build-arg BUILD_ENV=dev --build-arg xxx=xxx -t hello:v1 . # 环境,比如 dev prod ARG BUILD_ENV # BUILD_ENV 在 CMD 中需要用到,ARG 只是构建时能读取,CMD 是运行时执行的,只能读到 ENV ENV BUILD_ENV ${BUILD_ENV} COPY . . # 这里其实就 ARG 就够了,因为这一步还是构建过程 RUN make build.${BUILD_ENV} # 不要用 CMD ["npm", "run", "serve:${BUILD_ENV}"] ,因为会读不到 BUILD_ENV # 见 https://github.com/moby/moby/issues/5509#issuecomment-42173047 CMD npm run serve:${BUILD_ENV}
比如需要 FROM node:14.16.1-alpine3.13 ,在宿主机上先拉取一次 node:14.16.1-alpine3.13 会加快一丢丢镜像构建速度,拉取后下图中的 1.6s 会变为 0s 。
FROM node:14.16.1-alpine3.13
node:14.16.1-alpine3.13
这应该是近期 docker 相关的最后一篇了,这一切都是因为要优化下一个项目的镜像构建速度,用这个踩坑记录作为终章也挺合适的 hhh
本地构建镜像时,打包一直莫名失败
是的,从一开始就不顺利,本地测试时,镜像构建一直卡在打包那里,等着等着就失败了,又看不到啥有效日志。
最后的最后,想起来,会不会是内存不足导致的打包失败。
经过大佬指点默默把 docker 的内存设置从默认的 2G 改为 4G ,再次构建,就成功了。
私有 npm 仓库时, yarn 装包一直失败
对于 yarn v1 安装私有仓库包,需要这样去装包:
RUN yarn || yarn || yarn
,详见 Yarn install for private module failing - unexpected end of file · Issue #7521 · yarnpkg/yarn · GitHub 。万物皆可国内源
凡是涉及到下载啥啥,如果发现很慢,就配置下国内源。
yarn 装包只安装了生产依赖,没有开发依赖
在 node 镜像中,如果先设了
ENV NODE_ENV production
,然后再RUN yarn
,就会只安装生产依赖,所以如果想安装全部依赖,要把ENV NODE_ENV production
这一步放后面。如果不需要依赖的缓存,就不要或者清理掉,减小镜像体积
RUN apk add --no-cache make
RUN yarn && yarn cache clean
rm -rf /var/lib/apt/lists/*
CMD 中想使用变量只能用环境变量
ARG 参数在 CMD 中读取不到,因为 ARG 是构建时,而 CMD 是运行时,CDM 只能读到环境变量。
并且使用
CMD ["npm", "run", "serve:${BUILD_ENV}"]
这种写法也是读不到值的,需要用CMD npm run serve:${BUILD_ENV}
。在宿主机上先拉取一次基础镜像
比如需要
FROM node:14.16.1-alpine3.13
,在宿主机上先拉取一次node:14.16.1-alpine3.13
会加快一丢丢镜像构建速度,拉取后下图中的 1.6s 会变为 0s 。