Node.js 镜像仓库为每个 Node.js 版本提供了若干个镜像标签。例如,8.10.0版本就有6个不同的镜像标签:
8.10.0 – 266MB compressed
8.10.0-alpine– 23MB compressed
8.10.0-onbuild – 266MB compressed
8.10.0-slim – 92MB compressed
8.10.0-stretch – 343MB compressed
8.10.0-wheezy– 202MB compressed
有趣的是这个 alpine 版本。这是一个最小的可用镜像,因为它基于 Alpine Linux 项目。Alpine 使用的是 musl libc 而不是内部的 glibc ,但 Node.js 通常在典型的开发者系统中使用后者(glibc)。这可能会破坏您使用的一些函数库,但是我的基于 Express.js 的应用程序并没有问题。如下所示,切换到 alpine:
# change the first line from:
FROM node:8.10.0
# to:
FROM node:8.10.0-alpine
接下来,运行docker build 命令。在我的案例中,镜像的大小已经缩减到206MB,比初始大小减少了78%!
步骤2:使用 NPM --production 标签(206 MB缩减至79 MB)
默认情况下, npm install 将安装所有依赖项,包括 devDependencies 部分。有了 --production 标签,我们就可以从 package.json 文件中仅安装所需的依赖项。在 devDependencies 部分中,我保留了构建系统、测试工具和一些其它的开发工具。我习惯于将 React.js 函数库和其它的 UI 依赖项一起保留在 package.json 文件中,但是它看起来是不正确的,因为我有 webpack 来生成所有的 UI 依赖项。因此,正确的方法是将所有不会直接用于在生产服务器上,也不会直接用于在 devDependencies 部分上的依赖项移除。
**原则是:如果依赖项只是在构建期间需要用到,请将它移到 devDependencies 部分。
**
我没有为服务器文件打包,所以我将所有服务器依赖项保留在依赖项部分中,就像以前一样。这意味着工作流程应包含以下步骤:
构建 UI 包;
将UI包复制到 Docker 镜像;
将服务器文件复制到 Docker 镜像;
将 package.json 文件复制到 Docker 镜像;
在镜像中执行 npm install --production 命令;
我得到的 Dockerfile 的最终版本,如下所示:
FROM node:8.10.0-alpine
RUN mkdir -p /usr/app/build
WORKDIR /usr/app
COPY ./build /usr/app/build
COPY ./package.json /usr/app/package.json
RUN cd /usr/app &&npm install --production
EXPOSE 3000
CMD [ "npm", "run", "start" ]
再次运行docker build命令。
可以的,用CSS滤镜, 镜像变换, 水平变换FlipH, 垂直变换FlipV如:<img src = " a.jpg " style = " filter: FlipH" >
<img src = "b.jpg" style ="filter: FlipV" >