Node.js服务Docker容器化应用实践小结

当我们需要将一个Node.js应用部署到生产环境时,Docker容器化是一个非常好的选择。其主要优点是使得应用部署变得非常容易,同时也方便了应用的扩展及做负载平衡。下面我们将介绍一下如何将一个Node.js应用Docker化,并对相关知识进行一些说明。

前置知识

在开始学习Docker容器化应用实践前,需要掌握以下知识:

  • Docker基本术语和概念
  • Node.js应用的开发和部署
  • Linux系统的基本操作

如果对上面的知识还不太熟悉,建议先学习一下。

Docker的安装

在开始Docker容器化应用实践之前,需要先安装Docker。

MacOS

在MacOS上安装Docker比较简单,只需要访问Docker官网下载并安装。

Linux

在Linux系统上安装Docker比较麻烦,具体可以参考Docker官方文档,这里仅提供Ubuntu系统的安装方式:

  1. 首先,更新apt包列表

sudo apt-get update

  1. 安装Docker必要依赖

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

  1. 添加GPG秘钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  1. 添加Docker源

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

  1. 安装Docker

sudo apt-get update
sudo apt-get install docker-ce

Windows

在Windows上安装Docker也比较简单,只需要访问Docker官网下载并安装。

Node.js应用的Docker化

本篇文章以一较为简单的Node.js应用为例。

Node.js应用目录结构:

├── app.js
├── package.json
└── public
    ├── index.html
    └── style.css

Dockerfile

首先创建Dockerfile,将应用打包进镜像。Dockerfile内容如下:

# 设置基础镜像为Node.js(lts)环境, 版本为最新
FROM node:lts-alpine

# 将 当前 目录下的内容拷贝到 /usr/app/ 目录下
COPY . /usr/app/

# 切换工作目录到 /usr/app/
WORKDIR /usr/app/

# 安装 Node.js 应用依赖
RUN npm install --production

# 让容器监听 $PORT 环境变量 或者端口
# 这个变量由容器启动时通过 -e PORT=4000 传入
EXPOSE $PORT

# 当容器启动时运行应用
CMD ["npm", "start"]

Dockerfile解释:

  • 第一行:指定将要基于哪个镜像进行镜像构建。
  • 第二行:指定将制作的镜像挂载到 /usr/app/ 目录下。
  • 第三行:切换文件到 usr/app 目录下。
  • 第四行:安装应用依赖项。(npm i --production)
  • 第五行:设置暴露端口号$PORT(通常为80或8080)。
  • 第六行:设置Docker容器在启动时所要执行的命令。

构建镜像

在构建镜像之前,首先需要确保当下目录中存在Dockerfile文件。下面介绍用构建镜像的命令:

$ docker build -t sn-cli-docker .

其中 -t sn-cli-docker 表示命名决定为 sn-cli-docker. 指当前目录。

构建镜像会根据Dockerfile文件的指示,将我们的Node.js应用打包到一个名为 sn-cli-docker 的容器镜像中。该构建命令可能会花费一些时间。

运行容器

构建的下一步,将是使用 docker run 命令运行容器。再次强调,容器是镜像的 实例

$ docker run -dit -p 3000:80 sn-cli-docker

运行容器后,可以通过 http://localhost:3000 访问应用。

下面解释一下使用的指令:

  • docker run 后面三个参数;
  • -d 让容器在后台运行;
  • -p 将容器内部的80端口映射到本地的3000端口。(即容器端口在3000)

两个具体案例

使用nodemon开发模式

从Dockerfile的内容可以看出,它首先执行了 npm install --production 来安装依赖库,然后运行了 npm start 命令来启动应用。这种方式通常用于生产环境应用。

当开发 Node.js 应用的时候,我们通常需要一个自动重启机制来做到开发环境下的即时调试,这时 nodemon 是一个非常好的选择。下面给出一个使用nodemon重启机制的示例:

在生产模式的Dockerfile中,将CMD那一行修改即可(添加nodemon),如下:

# 运行 nodemon 
CMD ["npx", "nodemon", "app.js"]

示例Docker镜像构建语句:

$ docker build -t sn-cli-docker-nodemon .

启动命令:

$ docker run -it -v $(pwd):/usr/app -p 3000:3000 --name my-node-app sn-cli-docker-nodemon

命令解释:

  • -it 以交互式终端启动容器。
  • -v 挂载主机文件系统。
  • --name 指定名称,方便查找。

使用docker-compose多容器运行

通常情况下,我们的应用不能由单一的容器来管理。例如,在现实场景中,应该拆分微服务为一些可重用的组件,组件间的关系可能是复杂的。这时我们需要一个容器编排工具来解决这种问题。Docker本身提供了Docker Compose这样的工具来做这个事情。

假设有以下两个服务:

version: '3'

services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

开启命令:

$ docker-compose up

这样,docker-compose 将会启动两个容器:

  1. 包含 Flask 应用的 Web 容器
  2. 包含 Redis 容器

若希望在后台运行它们,只需将 docker-compose 命令改为 docker-compose up -d 即可。

总结

通过以上的内容,我们可以学会将一个 Node.js 应用Docker化。其中,我们需要掌握 Dockerfile 的基本语法和应用场景。对于较为复杂的应用场景,我们可以使用 Docker Compose 进行容器编排。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js服务Docker容器化应用实践小结 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 使用coffeescript编写node.js项目的方法汇总

    使用CoffeeScript编写Node.js项目的方法汇总 什么是CoffeeScript CoffeeScript是一种优雅、简洁、可读性高的编程语言,它可以被转译成JavaScript代码。它编译出的JavaScript代码易于阅读和编写,并且比原生的JavaScript代码更加精简。 在Node.js项目中使用CoffeeScript的步骤 步骤1:…

    node js 2023年6月8日
    00
  • Node.js中常规的文件操作总结

    下面我将为你详细讲解“Node.js中常规的文件操作总结”的完整攻略。 1. 文件操作方法 Node.js中提供了一系列的文件操作方法,常用的有以下几种: 1.1 fs.access(path[, mode], callback) 用于检查文件或目录是否可访问。 const fs = require(‘fs’); fs.access(‘/path/to/fi…

    node js 2023年6月8日
    00
  • Vue+Node实现的商城用户管理功能示例

    为了讲解“Vue+Node实现的商城用户管理功能示例”的完整攻略,我们需要介绍如下内容: 基本介绍 本示例将通过Vue和Node配合完成一个基于网络的商城用户管理功能,其中前端部分我们使用Vue作为框架,本地服务器采用npm环境,后端服务器采用Node.js完成。 为了使示例更加方便理解,我们将仅实现商城用户管理功能,相关的代码将展示如何实现用户注册、登录、…

    node js 2023年6月8日
    00
  • 利用PM2部署node.js项目的方法教程

    利用PM2部署node.js项目的方法教程 简介 PM2是一个Node.js进程管理器,可用于管理和部署Node.js项目。它可以在多个进程之间负载平衡,自动重启崩溃的进程并进行日志记录。在这篇攻略中,我们将介绍如何使用PM2来部署和管理Node.js项目。 安装 PM2是通过npm安装的,因此您需要在本地安装Node.js和npm。安装Node.js和np…

    node js 2023年6月8日
    00
  • 微信js-sdk界面操作接口用法示例

    我来为您详细讲解一下“微信js-sdk界面操作接口用法示例”的教程。 一、前置条件 使用微信JS-SDK前,需要先通过微信公众平台开发者中心对该公众账号进行开发授权。具体操作可参照微信官方文档《微信公众平台开发者中心-创建公众账号》进行操作。 二、JS-SDK核心方法 在使用JS-SDK的接口前,需要引入JS-SDK的核心库文件http://res.wx.q…

    node js 2023年6月8日
    00
  • NodeJS测试框架mocha入门教程

    当你打算使用NodeJS编写代码进行开发时,测试框架是很重要的一环。Mocha作为最流行的NodeJS测试框架之一,可以让你编写更优雅的单元测试。 本篇文章将介绍如何开始使用Mocha测试框架编写测试用例。下面我们将从以下几个方面逐一讲解: 安装Mocha 编写简单的测试用例 使用断言库chai.js 运行多个测试用例 配置文件 1. 安装Mocha 首先,…

    node js 2023年6月8日
    00
  • 使用pm2部署node生产环境的方法步骤

    使用pm2部署node生产环境的方法步骤: 安装pm2 pm2是一个node进程管理工具,我们需要先使用npm全局安装pm2,命令如下: npm install pm2 -g 创建node.js应用 我们需要使用node.js编写我们的应用程序,可以创建一个简单的Express框架应用程序作为示例,代码如下: const express = require(…

    node js 2023年6月8日
    00
  • nodejs 搭建简易服务器的图文教程(推荐)

    下面是详细的“nodejs 搭建简易服务器的图文教程(推荐)”的攻略。 基本概念 Node.js是一个基于Chrome V8引擎的JavaScript运行时。它可以解析和执行JavaScript代码,并在服务器端运行,可以联系上下文环境并直接访问OS底层库的服务器环境。Node.js在后端开发领域发挥着越来越重要的作用,我们可以使用Node.js轻松地搭建一…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部