对于节点应用程序,构建轻量级映像的更好选择是什么?
单个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
多个Docker映像
在具有构建工具的一个Docker容器中,执行以下操作:
yarn install
yarn build
yarn test
然后获取构建资产和package.json
,并将其复制到仅包含运行时环境变量的新容器中。结果是图像很小(也许node:alpine
),只有非常有限的源文件。
yarn install --production --ignore-scripts --prefer-offline
yarn start
答案 0 :(得分:1)
如果要为应用程序构建轻量级映像,请记住以下几点:
尝试使用高山图像,例如node:8.12.0-alpine,因为高山图像是最轻的基本操作系统图像。如果要安装软件包,请执行@ex.automain
def run(config):
config.C # Option 1
config['C'] # Option 2
尝试通过在同一RUN apk add --no-cache --virtual your_packages... && rm -rf /var/cache/apk/*
语句中运行多个命令来减少层数,例如RUN
尝试合并彼此抵消的命令,例如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文件而不是一个文件不会减少层数或缩小大小。它仅使您逻辑上要单独处理的任务分离。