适用于Node和Docker的最佳构建工作流程

时间:2018-11-21 19:52:34

标签: docker workflow devops

对于节点应用程序,构建轻量级映像的更好选择是什么?

  1. 单个Docker映像。可能需要构建工具,并将所有构建时环境变量暴露给容器。

    yarn install # install deps and devDeps
    yarn build # build our application
    yarn test # perform tests
    yarn install --production --ignore-scripts --prefer-offline # Remove devDeps
    rm -rf src # Remove source files
    yarn start
    
  2. 多个Docker映像

    在具有构建工具的一个Docker容器中,执行以下操作:

    yarn install
    yarn build
    yarn test
    

    然后获取构建资产和package.json,并将其复制到仅包含运行时环境变量的新容器中。结果是图像很小(也许node:alpine),只有非常有限的源文件。

    yarn install --production --ignore-scripts --prefer-offline
    yarn start
    

1 个答案:

答案 0 :(得分:1)

如果要为应用程序构建轻量级映像,请记住以下几点:

  1. 尝试使用高山图像,例如node:8.12.0-alpine,因为高山图像是最轻的基本操作系统图像。如果要安装软件包,请执行@ex.automain def run(config): config.C # Option 1 config['C'] # Option 2

  2. 尝试通过在同一RUN apk add --no-cache --virtual your_packages... && rm -rf /var/cache/apk/*语句中运行多个命令来减少层数,例如RUN

  3. 尝试合并彼此抵消的命令,例如RUN yarn install && yarn build && yarn test && yarn install --production --ignore-scripts --prefer-offline && rm -rf src && yarn start。这里RUN apk update && apk add ... && rm -rf /var/cache/apk/*创建一个缓存,apk update清除它。无需分别运行这两个命令,因为它们彼此抵消,因此,没有必要使两层相互取反并增大最终图像的大小。

注意:拥有多个docker文件而不是一个文件不会减少层数或缩小大小。它仅使您逻辑上要单独处理的任务分离。