빠른 업그레이드, 원활한 전환, 로드 밸런싱, 애플리케이션 격리 및 기타 배포 기능을 구현할 수 있을 뿐만 아니라 성숙하고 안정적인 모니터링 기능도 제공하는 합리적이고 효율적인 배포 솔루션입니다.
kubernetes
는 Node 애플리케이션을 서버측 애플리케이션의 블랙박스로 간주하며, 이는 위의 조건과 완벽하게 일치합니다. k8s에 노드를 배포하는 팀이 점점 늘어나고 있습니다. [동영상 튜토리얼 추천: node js tutorialkubernetes
把 Node 应用视作一个服务端应用的黑盒子,完美匹配了以上条件,越来越多的团队把 node 部署在 k8s 上。【视频教程推荐:node js教程、Docker视频教程 】
但在此之前,需要先把 Node 应用跑在一个 Docker 容器上,这也是本章的主题。
关于前端在 docker 上部署,作者曾写了几篇文章:
index.js
一个 hello, world
版的 Node Web App
const http = require('http') const app = async (req, res) => { res.end('hello, world') } http.createServer(app).listen(3000, () => console.log(3000))
package.json
配置 npm start
来启动应用
"scripts": { "start": "node index.js" },
但这仅仅是最简单的 Node 应用,真实环境中还有各种数据存储及定时任务调度等,暂撇开不谈,这已经足够了。
再稍微复杂一点点的 Node 应用可以查看山月的项目 whoami: 一个最简化的 serverless
与 dockerize
示例。
在生产环境中,无需安装 devDependecies
中依赖,NODE_ENV 环境变量设置为 production 时将会跳过 devDep
。
# 通过设置环境变量,只安装生产环境依赖 $ NODE_ENV=production npm ci # 通过显式指定 flag,只安装生产环境依赖 $ npm ci --production
另一方面,某些第三方模块会根据 NODE_ENV 环境变量做出一些意料不到的配置。因此在生产环境注意该环境变量的配置。
一个典型的、面向服务端的 Node 应用是这么跑起来的:
npm install
npm run config
,从配置服务(consul/vault)拉取配置 ,如数据库与缓存的账号密码,此时构建服务器需要配置服务权限npm run migrate
,数据库迁移脚本,执行数据库表列行更改操作,此时构建服务器需要数据库访问权限npm start
,启动一个 Node 服务把运行步骤翻译为 Dockerfile:
# 选择一个体积小的镜像 (~5MB) FROM node:12-alpine # 环境变量设置为生产环境 ENV NODE_ENV production WORKDIR /code # 更好的根据 Image Layer 利用缓存 ADD package.json package-lock.json /code RUN npm ci ADD . /code # 配置服务及数据库迁移 RUN npm run config --if-present && npm run migrate --if-present EXPOSE 3000 CMD npm start
这对于大部分 Node 应用已经是足够了,如果精益求精,可以再走接下来的多阶段构建
在 Node 中有可能存在着一些 Native Addon,它们通过 node-gyp 进行编译,而它依赖于 python
,make
与 g++
。
$ apk --no-cache add python make g++
在带有编译过程的镜像构建中,源文件与构建工具都会造成空间的浪费。借助镜像的多阶段构建可以高效利用空间。Go App
与 FE App
的构建也遵循此规则。
在构建 Node 应用镜像时,第一层镜像用以构造 node_modules
, Docker 동영상 튜토리얼
- Docker의 프런트 엔드 배포에 대해 저자는 다음과 같은 여러 기사를 작성했습니다.
Docker에서 프런트 엔드를 배포하는 방법- 프론트엔드 배포 Prview and Production
hello, world
버전 of Node Web App🎜# 选择一个体积小的镜像 (~5MB) FROM node:12-alpine as builder # 环境变量设置为生产环境 ENV NODE_ENV production # 更好的根据 Image Layer 利用缓存 ADD package.json package-lock.json ./ RUN npm ci # 多阶段构建之第二阶段 # 多阶段构建之第二阶段 # 多阶段构建之第二阶段 FROM node:12-alpine WORKDIR /code ENV NODE_ENV production ADD . . COPY --from=builder node_modules node_modules # 配置服务及数据库迁移 RUN npm run config --if-present && npm run migrate --if-present EXPOSE 3000 CMD npm start🎜package.json🎜🎜
npm start
를 구성하여 애플리케이션을 시작하세요🎜rrreee🎜하지만 이것은 가장 간단한 Node 애플리케이션일 뿐입니다. 다양한 데이터 저장소가 있습니다. 실제 환경에서의 타이밍 작업 스케줄링 등은 제쳐두고 이것으로 충분합니다. 🎜🎜좀 더 복잡한 Node 애플리케이션의 경우 Shanyue의 프로젝트 whoami🎜: One of 가장 단순화된 서버리스
및 dockerize
예입니다. 🎜devDependecies
에 종속성을 설치할 필요가 없습니다. NODE_ENV 환경 변수가 프로덕션으로 설정되면 devDep를 건너뜁니다. 🎜rrreee🎜 반면 일부 타사 모듈은 NODE_ENV 환경 변수를 기반으로 예상치 못한 구성을 수행합니다. 따라서 프로덕션 환경에서 이 환경 변수의 구성에 주의하세요. 🎜<h2 id="item-3">Node 애플리케이션의 간단한 배포🎜🎜일반적인 서버 지향 Node 애플리케이션은 다음과 같이 실행됩니다.🎜🎜🎜<code>npm install
🎜🎜npm run config
는 데이터베이스 및 캐시된 계정 비밀번호와 같은 구성을 구성 서비스(consul/vault)에서 가져옵니다. 이때 서버를 빌드하려면 구성 서비스 권한이 필요합니다🎜🎜npm run migration, 데이터베이스 마이그레이션 스크립트는 데이터베이스 테이블 열 및 행 변경을 수행합니다. 이때 서버를 구축하려면 데이터베이스 액세스 권한이 필요합니다🎜🎜<code>npm start
, Node 서비스를 시작합니다🎜🎜🎜실행 단계를 번역합니다. Dockerfile에:🎜rrreee🎜이것은 대부분의 Node 애플리케이션에 충분합니다. 계속 개선하면 다음 다단계 구축으로 갈 수 있습니다🎜python
, make
및 g++
에 의존하는 node-gyp을 통해 컴파일됩니다. 🎜rrreee🎜컴파일 프로세스를 통한 이미지 빌드에서는 소스 파일과 빌드 도구로 인해 공간 낭비가 발생합니다. 미러링된 다단계 빌드 덕분에 공간을 효율적으로 사용할 수 있습니다. Go 앱
및 FE 앱
의 구성도 이 규칙을 따릅니다. 🎜🎜Node 애플리케이션 이미지를 구축할 때 첫 번째 레이어는 이미지는node_modules
를 구성하는 데 사용됩니다. 🎜rrreee🎜관련 기사🎜🎜🎜🎜N-API 및 Node.js용 C 애드온 작성 시작하기🎜🎜🎜🎜개발 및 프로덕션에서 Node.js용 Docker 사용🎜🎜🎜🎜더 많은 프로그래밍 관련 지식을 보려면 다음 사이트를 방문하세요. 🎜프로그래밍 입문🎜! ! 🎜위 내용은 Docker를 사용하여 Node.js 애플리케이션을 효율적으로 배포하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!