首頁 >web前端 >js教程 >如何使用docker使用node.js

如何使用docker使用node.js

Joseph Gordon-Levitt
Joseph Gordon-Levitt原創
2025-02-08 11:49:09118瀏覽

本教程演示了將docker容器用於node.js應用程序的優點,並建立了有效的開發工作流程。

> node.js在服務器和客戶端端都使用JavaScript來創建快速,可擴展的Web應用程序。 儘管您的應用程序可能會在開發機上完美運行,但它在不同的環境(同事的機器,生產服務器)上的性能始終如一。 考慮以下這些潛在問題:

  • >>操作系統變化:您的開發環境可能是MacOS,而同事使用Windows,而Production Server則運行Linux。
  • node.js版本不一致:您可以使用node.js 20,但其他人則使用各種版本。
  • >依賴關係差異:數據庫和其他依賴關係在不同的平台上可能會有所不同或不可用。
  • 安全問題:
  • 在將代碼部署到各種操作系統時可能會出現不可預見的安全風險。
  • 密鑰益處

跨平台兼容性:
    docker通過啟用node.js應用程序在孤立的容器環境中運行來解決“它在我的計算機上工作”問題。 Docker中的Simply Node.js App部署:我們將通過創建基本node.js腳本並在Docker容器中執行它。 >>>>>
  • >>增強node.js開發工作流程:我們將展示Docker如何簡化Node.js應用程序的開發過程。
  • > docker的解決方案
  • docker有效地解決了上述兼容性挑戰。您無需直接安裝應用程序,而是在輕巧的,孤立的虛擬機式環境中運行,稱為容器。
與模擬整個PC硬件和操作系統的虛擬機不同,Docker仿真了操作系統,使您可以直接安裝應用程序。 每個基於Linux的容器運行一個應用程序並通過虛擬網絡進行HTTP通信是常見的做法。

優點很多:>

一致的環境:您的Docker設置鏡像您的生產Linux服務器,簡化了部署。

How to Use Node.js with Docker 簡化的依賴關係管理:

在幾分鐘內下載,安裝和配置依賴項。

跨平台一致性:

您的容器化應用程序在所有平台上的行為相同。 >
    >
  • 增強的安全性:>如果您的應用程序在容器中發生故障,它不會影響您的主機機器;您可以輕鬆重新啟動容器。
  • >使用Docker,在本地安裝Node.js或使用NVM(例如NVM)的運行時管理器變得不必要。 >

    您的第一個node.js腳本

    >安裝Docker桌面(Windows,MacOS或Linux)。創建一個名為version.js的簡單腳本:

    >
    <code class="language-javascript">console.log(`Node.js version: ${process.version}`);</code>

    如果Node.js是本地安裝的,請運行它以查看版本。 現在,在Docker容器中運行(使用最新的LTS Node.js版本)

    <code class="language-bash">$ docker run --rm --name version -v $PWD:/home/node/app -w /home/node/app node:lts-alpine version.js</code>

    (Windows PowerShell)

    <code class="language-powershell">> docker run --rm --name version -v ${PWD}:/home/node/app -w /home/node/app node:lts-alpine version.js</code>
    docker下載依賴項可能需要花費一些時間。隨後的運行速度要快得多。 您可以輕鬆地切換node.js版本(例如,

    )。 該腳本在具有特定node.js版本的Linux容器中執行。 node:21-alpine

    命令分解:

    :從圖像啟動一個容器。
    • docker run:終止時卸下容器。
    • --rm:為容器分配一個名稱。
    • >
    • --name version:將當前目錄安裝為容器內部的音量。
    • :設置容器內的工作目錄。 > -v $PWD:/home/node/app
    • :指定Docker Image(Alpine Linux上的LTS node.js)。
    • -w /home/node/app
    • :執行的命令。
    • Docker圖像可在Docker Hub上獲得,提供的各種版本標記了node:lts-alpine
    • >的標識符。 Alpine Linux是簡單項目的輕量級發行版。
    • version.js>
    • 運行更複雜的應用程序

    對於具有依賴關係和構建步驟的應用程序(使用NPM),必須進行自定義Docker映像。此示例使用express.js::lts-alpine 20-bullseye-slim創建一個名為latest的目錄,add

    > >和

    創建simplepackage.json

    <code class="language-json">{
      "name": "simple",
      "version": "1.0.0",
      "description": "simple Node.js and Docker example",
      "type": "module",
      "main": "index.js",
      "scripts": {
        "debug": "node --watch --inspect=0.0.0.0:9229 index.js",
        "start": "node index.js"
      },
      "license": "MIT",
      "dependencies": {
        "express": "^4.18.2"
      }
    }</code>
    構建圖像:

    index.js>

    運行容器:
    <code class="language-javascript">// Express application
    import express from 'express';
    
    // configuration
    const cfg = {
      port: process.env.PORT || 3000
    };
    
    // initialize Express
    const app = express();
    
    // home page route
    app.get('/:name?', (req, res) => {
      res.send(`Hello ${req.params.name || 'World'}!`);
    });
    
    // start server
    app.listen(cfg.port, () => {
      console.log(`server listening at http://localhost:${cfg.port}`);
    });</code>

    > Dockerfile>在

    >。
    <code class="language-dockerfile"># base Node.js LTS image
    FROM node:lts-alpine
    
    # define environment variables
    ENV HOME=/home/node/app
    ENV NODE_ENV=production
    ENV NODE_PORT=3000
    
    # create application folder and assign rights to the node user
    RUN mkdir -p $HOME && chown -R node:node $HOME
    
    # set the working directory
    WORKDIR $HOME
    
    # set the active user
    USER node
    
    # copy package.json from the host
    COPY --chown=node:node package.json $HOME/
    
    # install application modules
    RUN npm install && npm cache clean --force
    
    # copy remaining files
    COPY --chown=node:node . .
    
    # expose port on the host
    EXPOSE $NODE_PORT
    
    # application launch command
    CMD [ "node", "./index.js" ]</code>
    上訪問該應用程序

    adocker image build -t simple .文件可以防止不必要的文件被複製到圖像中。

    >

    改進了Docker組成的開發工作流程docker run -it --rm --name simple -p 3000:3000 simple

    >

    先前的方法效率低下。 Docker組成提供了更好的解決方案。創建http://localhost:3000/

    .dockerignore

    開始。 更改為觸發自動重新啟動。 使用VS Code的調試器(附加到端口9229)進行增強調試。 停止使用

    >。

    結論

    docker-compose.yml

    雖然Docker需要初始設置,但可靠,可分發代碼的長期收益很重要。 本教程涵蓋了基本面;探索進一步的資源以進行高級使用。 這些圖像是為了簡潔而保留的。

以上是如何使用docker使用node.js的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn