Docker如何高效部署Node應用?看這裡
一個合理並且高效的部署方案,不僅能夠實現快速升級,平滑切換,負載均衡,應用隔離等部署特性,而且配有一套成熟穩定的監控。 |
❝ 如何在生產環境部署一個 Node 應用?[1]❞
一個合理並且高效的部署方案,不僅能夠實現快速升級,平滑切換,負載均衡,應用隔離等部署特性,而且配有一套成熟穩定的監控。
kubernetes 把 Node 應用視作一個服務端應用的黑盒子,完美匹配了以上條件,越來越多的團隊把 node 部署在 k8s 上。
但在此之前,需要先把 Node 應用跑在一個 Docker 容器上,這也是本章的主題。
一個 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))
配置 npm start 來啟動應用
"scripts": { "start": "node index.js" },
但這僅僅是最簡單的 Node 應用,真實環境中還有各種資料儲存及定時任務排程等,暫撇開不談,這已經足夠了。
再稍微複雜一點點的 Node 應用可以檢視山月的專案 whoami[5]: 一個最簡化的 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 的構建也遵循此規則。
多階段構建 Go 應用[6]
多階段構建前端應用[7]
在構建 Node 應用映象時,第一層映象用以構造 node_modules。
# 選擇一個體積小的映象 (~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
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2719327/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 Docker 部署 Node 應用Docker
- 初識docker以及node應用的部署Docker
- 如何使用 docker 部署前端應用Docker前端
- 使用 Docker 部署 Node 應用 - 映象檔案尺寸的優化Docker優化
- Docker_Docker應用部署4Docker
- Docker部署Angular應用DockerAngular
- Docker常用的應用部署Docker
- 雲伺服器:如何在docker容器中部署應用伺服器Docker
- 如何在docker中部署springboot的web應用DockerSpring BootWeb
- Docker 入門系列三:Docker 應用部署-MySQLDockerMySql
- Docker 入門系列三:Docker 應用部署-NginxDockerNginx
- Docker 入門系列三:Docker 應用部署-RedisDockerRedis
- Docker 的應用場景在哪裡Docker
- Docker容器化部署Python應用DockerPython
- Docker搭建部署Node專案Docker
- 如何為雲原生應用帶來穩定高效的部署能力?
- [應用案例]【夢雲社群】移動時代社群新亮點,看這裡
- Flask 應用如何部署Flask
- K8s小白?應用部署太難?看這篇就夠了!K8S
- Docker中部署.NET CORE應用(控制檯應用程式篇)Docker
- 【轉】Docker部署Tomcat及Web應用DockerTomcatWeb
- 在生產環境使用Docker部署應用Docker
- Docker的安裝與容器應用部署Docker
- 電商小遊戲火爆,開發者如何快速接入?看這裡遊戲
- 看這裡!移動應用測試必備六種型別說明型別
- React-Router看這裡React
- 想了解物聯網應用的自動部署,看這篇就夠了
- 教你使用Docker容器化Node.js應用程式DockerNode.js
- 使用Docker容器化部署實踐之Django應用部署(一)DockerDjango
- Docker 安裝、常用命令、應用部署Docker
- Linux Docker 部署 ASP.NET Core應用LinuxDockerASP.NET
- 在 Docker 中部署 ASP.NET CORE 應用DockerASP.NET
- 命令列不會?看這裡命令列
- Docker容器與虛擬化技術:OpenEuler 部署 docker容器應用Docker
- 如何快速部署容器化應用
- LangServe如何革新LLM應用部署?Gse
- 帶你理解Kubernetes,部署一個Node應用
- Win10 下安裝 docker,部署 Web 應用Win10DockerWeb