使用 Docker 部署 Node 應用
容器將應用與環境打包整合,解決了應用外部依賴的痛點,打包後通過視窗可方便地部署到任意環境,用過就知道很香。 建立示例應用以 NestJS 為例,先建立一個示例應用。 $ npm i -g @nestjs/cli $ nest new my-app $ cd my-app $ yarn && yarn start 然後 app.controller.ts 中新增如下 action: @Get('ping') async ping() { return 'pong'; } 測試一把會得到如下返回,證明我們的 app 一切正常: $ curl localhost:3000/ping pong Docker 介紹先了解 Docker 的兩個核心概念:
Docker 安裝$ brew install --cask docker 如果已經安裝過,升級可使用如下命令: $ brew install --cask docker 然後在程式目錄或 Spotlight 中找到並啟動 Docker,系統狀態列中會有個鯊魚圖示。 啟動後命令行工具已經可用,檢查安裝: $ docker —version Docker version 20.10.6, build 370c289 使用通過 $ docker help
檢視具體命令的幫助可在 $ docker help run
打包生成映象Docker 中打包後的應用存在於映象中,其中便包含了應用及依賴的環境。將這個映象檔案進行分發就可以在其他地方載入執行,實現了在新環境中方便部署,無須再關心外部依賴。 建立 Dockerfile使用 Docker 打包應用需先建立 Dockerfile,其中包含指導 Docker 如何打包的指令。 $ touch Dockerfile 一般我們會基於已有映象來建立自己的映象,比如這裡打包 Node 應用,我們會使用一個已經包含 Node 環境的映象作為源。通過如下 FROM node:14 建立應用所在的目錄: # Create app directory
WORKDIR /usr/src/app
將檔案複製到目標路徑,然後進行 npm 包依賴的安裝: # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm install # If you are building your code for production # RUN npm ci --only=production 複製應用中的原始碼檔案: # Bundle app source COPY . . 依賴和原始碼都好後,可以編譯 Nest 應用,生成 dist 目錄了: npm run build 可以把映象看作一個封閉環境,外界要與其中的應用進行互動,比如這裡打包的是 Nest 服務,要能正常訪問 Nest 中我們編寫的 HTTP 介面,就需要 image 向外暴露埠。 因為預設 Nest 應用起的 3000 埠,這裡就將其暴露, EXPOSE 3000 最後一條指令,指導 Docker 啟動 Nest 應用: CMD [ "node", "dist/main" ] 所以完整的 Dockerfile 目前長這樣了: FROM node:14 # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ RUN npm install # If you are building your code for production # RUN npm ci --only=production npm run build # Bundle app source COPY . . EXPOSE 8080 CMD [ "node", "dist/main" ]
|
The text was updated successfully, but these errors were encountered: |