• Node.js 语言特定指南


    Node.js 语言特定指南

    本 Node.js 语言特定指南将教您如何使用 Docker 容器化 Node.js 应用程序。在本指南中,您将学习如何:

    • 容器化并运行一个 Node.js 应用程序
    • 设置一个本地环境以使用容器开发 Node.js 应用程序
    • 使用容器为 Node.js 应用程序运行测试
    • 使用 GitHub Actions 配置一个用于容器化 Node.js 应用程序的 CI/CD 流水线
    • 将容器化的 Node.js 应用程序部署到本地 Kubernetes 以测试和调试您的部署

    首先,从容器化一个现有的 Node.js 应用程序开始。

    容器化并运行 Node.js 应用程序

    1. 准备现有的 Node.js 应用程序

    确保您的项目结构类似于以下内容:

    my-node-app/
    ├── node_modules/
    ├── public/
    ├── src/
    ├── views/
    ├── .gitignore
    ├── package.json
    └── server.js
    

    2. 创建 Dockerfile

    在项目根目录下创建一个名为 Dockerfile 的文件,并添加以下内容:

    # 使用官方 Node.js 镜像作为基础镜像
    FROM node:14
    
    # 设置工作目录
    WORKDIR /usr/src/app
    
    # 复制 package.json 和 package-lock.json
    COPY package*.json ./
    
    # 安装依赖
    RUN npm install
    
    # 复制应用源代码
    COPY . .
    
    # 暴露应用端口
    EXPOSE 3000
    
    # 定义运行容器时的启动命令
    CMD ["node", "server.js"]
    

    3. 构建 Docker 镜像

    在项目根目录下运行以下命令以构建 Docker 镜像:

    docker build -t my-node-app .
    

    4. 运行容器

    使用以下命令运行容器:

    docker run -d -p 3000:3000 my-node-app
    

    现在,您可以通过浏览器访问 http://localhost:3000 来查看您的应用程序。

    设置本地开发环境

    使用 Docker 容器来设置本地开发环境有助于确保开发环境与生产环境一致。

    1. 创建 docker-compose.yml 文件

    在项目根目录下创建一个名为 docker-compose.yml 的文件,并添加以下内容:

    version: '3.8'
    services:
      app:
        image: node:14
        working_dir: /usr/src/app
        volumes:
          - .:/usr/src/app
          - /usr/src/app/node_modules
        ports:
          - "3000:3000"
        command: npm start
    

    2. 运行 Docker Compose

    在项目根目录下运行以下命令启动开发环境:

    docker-compose up
    

    现在,您的应用程序将在 http://localhost:3000 上运行,您可以进行开发并实时查看更改。

    使用容器运行测试

    1. 安装测试依赖

    确保在 package.json 中添加必要的测试依赖,例如:

    "devDependencies": {
      "mocha": "^8.3.2",
      "chai": "^4.3.4"
    }
    

    2. 创建测试脚本

    在项目中创建一个测试目录和测试脚本,例如 test/test.js

    const { expect } = require('chai');
    
    describe('Sample Test', () => {
      it('should return true', () => {
        expect(true).to.be.true;
      });
    });
    

    3. 更新 Dockerfile

    更新 Dockerfile 以安装开发依赖:

    # 使用官方 Node.js 镜像作为基础镜像
    FROM node:14
    
    # 设置工作目录
    WORKDIR /usr/src/app
    
    # 复制 package.json 和 package-lock.json
    COPY package*.json ./
    
    # 安装依赖,包括开发依赖
    RUN npm install
    
    # 复制应用源代码
    COPY . .
    
    # 暴露应用端口
    EXPOSE 3000
    
    # 定义运行容器时的启动命令
    CMD ["npm", "test"]
    

    4. 构建测试镜像并运行测试

    在项目根目录下运行以下命令构建测试镜像并运行测试:

    docker build -t my-node-app-test .
    docker run my-node-app-test
    

    配置 CI/CD 流水线

    使用 GitHub Actions 配置 CI/CD 流水线以自动化测试和部署过程。

    1. 创建 GitHub Actions 工作流文件

    在项目根目录下创建 .github/workflows/ci.yml 并添加以下内容:

    name: CI/CD Pipeline
    
    on:
      push:
        branches:
          - main
      pull_request:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - name: Checkout code
          uses: actions/checkout@v2
    
        - name: Set up Node.js
          uses: actions/setup-node@v2
          with:
            node-version: '14'
    
        - name: Install dependencies
          run: npm install
    
        - name: Run tests
          run: npm test
    
        - name: Build Docker image
          run: docker build -t my-node-app .
    
        - name: Push Docker image
          env:
            DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
            DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
          run: |
            echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin
            docker tag my-node-app $DOCKER_USERNAME/my-node-app:latest
            docker push $DOCKER_USERNAME/my-node-app:latest
    

    确保在 GitHub 仓库中添加 Docker Hub 凭据作为秘密(secrets)。

    部署到 Kubernetes

    使用 Kubernetes 部署和管理容器化的 Node.js 应用程序。

    1. 创建 Kubernetes 部署文件

    在项目根目录下创建 k8s/deployment.yml 并添加以下内容:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-node-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-node-app
      template:
        metadata:
          labels:
            app: my-node-app
        spec:
          containers:
          - name: my-node-app
            image: >/my-node-app:latest
            ports:
            - containerPort: 3000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: my-node-app-service
    spec:
      type: NodePort
      selector:
        app: my-node-app
      ports:
        - port: 3000
          targetPort: 3000
          nodePort: 30001
    

    2. 部署到 Kubernetes

    使用 kubectl 命令将应用程序部署到 Kubernetes 集群:

    kubectl apply -f k8s/deployment.yml
    

    您可以通过访问 http://:30001 查看应用程序。

    通过上述步骤,您已经学会了如何容器化并运行一个 Node.js 应用程序,设置本地开发环境,使用容器运行测试,配置 CI/CD 流水线,并将应用程序部署到 Kubernetes。

  • 相关阅读:
    你了解Java中的并发编程吗?
    人工智能证书的作用
    AI帮60年代老技术解决面料数字化难题,王华民团队新方法只需3分钟数据采集复刻面料真实效果...
    智云通CRM:如何进行大客户复杂关系的识别?
    Threejs着色器(GPU)编程——感温管网
    Debezium系列之:Debezium Server在生产环境大规模应用详细的技术方案
    【LVS】lvs的四种模式的区别是什么?
    关于CAS等原子操作,说点别人没说的
    PostgreSQL主键的添加与删除
    ZCMU--5121: 打印机队列
  • 原文地址:https://blog.csdn.net/qcpm1983/article/details/139970286