将我的静态站点Docker映像从419MB缩小到39MB

2020-05-03 21:10:55

[主页]最近,我将我的静态十一站点移到了一个码头容器上。这是我在一段时间内制作的第一批码头图像之一,所以一开始效率很低。

来自nginx:1.17.10-alpineRUN apk add--update NodeJS npmRUN NPM install-g@11ty/leventyCOPY。/appWORKDIR/appRUN NPM installRun 11.RUN rm-r/usr/share/nginx/html/run cp/app/_site//usr/share/nginx/html/-rEXPOSE 80。

这个docker图像产生了419MB的最终图像,大约花了3分钟来构建。这其中有一些明显的问题。例如,每次我更改它必须经过的任何文件时,都会重新安装我的所有node_module。其次,我在全局安装Eleviti,同时在第二个NPM安装期间安装它。

from nginx:1.17.10-alpine as npmPackagesRun apk add--update NodeJS npmWORKDIR/appCOPY Package.json.Run NPM installFROM nginx:1.17.10-alpineRUN apk add--update NodeJS npmWORKDIR/appCOPY--from=npmpackage/app/appCOPY。.RUN NPM运行构建运行rm-r/usr/share/nginx/html/run cp/app/_site//usr/share/nginx/html/-rEXPOSE 80。

这个构建被分成两个部分,首先它只复制了Package.json并运行NPM安装。这意味着假设Package.json文件根本没有更改,那么在第一次docker构建之后,它将缓存node_module,这样它就不必在每次构建时都安装NPM。这会将坞站图像缩小到329MB,稍好一些,但仍然非常臃肿。在浏览了一下docker图像后,我发现了这个问题,我将/app文件夹保持不变……。

from nginx:1.17.10-alpine as npmPackagesRun apk add--update NodeJS npmWORKDIR/appCOPY Package.json.Run NPM installFROM nginx:1.17.10-alpine as builderRun apk add--update NodeJS npmWORKDIR/appCOPY--from=npmpackage/app/appCOPY。.RUN NPM运行buildRun rm-r/usr/share/nginx/html/run cp/app/_site//usr/share/nginx/html/-rFROM nginx:1.17.10-alpineCOPY--from=builder/app/_site//usr/share/nginx/html/expos80。

这是我最终得到的最终映像,请注意最后一层没有安装NPM或NodeJS。这是为了节省空间,因为此时构建器和npmPackagelayer已经完成了与NodeJS相关的所有工作。这张图片只占了691MB,考虑到我的网站的编译版本由于各种图片超过了50MB,这已经相当不错了。下一步缩小我的站点的停靠站图像将是压缩图像,但这与停靠站图像是无关的。

编辑:压缩所有图片和外福工艺资源包后,整个站点为19MB,图片为39MB。

汉普顿·摩尔(Hampton Moore)著