Dockerfile中基础镜像选择的重要性
- 安全性:基础镜像的安全性直接影响整个容器化应用。如果基础镜像存在安全漏洞,应用也易遭受攻击。例如,一些老旧的基础镜像可能包含已知的CVE漏洞,使用这样的镜像部署应用,可能导致数据泄露、服务被劫持等风险。
- 镜像大小:基础镜像大小会影响镜像构建时间、传输时间和运行时占用的资源。较小的基础镜像可以加快镜像的构建和拉取速度,减少存储空间占用,在资源有限的环境中优势明显。比如,使用轻量级的Alpine Linux作为基础镜像,相比完整的Ubuntu镜像,大小会小很多。
- 兼容性:基础镜像需要与应用所依赖的软件和运行时环境兼容。Node.js应用需要特定版本的操作系统库、运行时依赖等,若基础镜像不兼容,应用可能无法正常运行。例如,Node.js应用依赖于某个版本的libssl库,如果基础镜像中的libssl库版本不匹配,可能导致应用在运行时出现链接错误。
为简单Node.js web应用选择合适的基础镜像
- 官方Node.js镜像:官方的Node.js镜像在Docker Hub上维护,是一个很好的选择。它已经预装了Node.js运行时环境,并且有不同版本的镜像可供选择,方便匹配应用所需的Node.js版本。例如,如果应用使用的是Node.js 14版本,可以选择
node:14
作为基础镜像。
FROM node:14
- Alpine Linux + Node.js:如果追求更小的镜像体积,可以选择基于Alpine Linux的Node.js镜像。Alpine Linux是一个轻量级的Linux发行版,适合用于容器化环境。比如
node:14-alpine
。
FROM node:14-alpine
构建镜像时安装项目依赖的常用指令
- npm install:对于使用npm管理依赖的Node.js项目,在Dockerfile中进入项目目录后,使用
npm install
指令安装依赖。假设项目代码在/app
目录下:
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY. .
- yarn install:若项目使用Yarn管理依赖,同样进入项目目录后,使用
yarn install
。前提是基础镜像中已安装Yarn,或在Dockerfile中先安装Yarn。
WORKDIR /app
COPY package*.json ./
RUN yarn install
COPY. .