如何在Docker上构建Node.js应用程序

时间:2020-02-23 14:41:09  来源:igfitidea点击:

Docker是什么?

Docker是一个免费的开源开发平台,允许开发人员在容器中开发和部署其应用程序。
容器带有自己的库和框架,并使应用程序可以在与主机操作系统隔离的环境中进行开发。
本教程将指导您如何在Docker上构建Node.js应用程序的过程。

那么,为什么要在docker上构建应用程序呢?

  • 工作环境的一致性。
    在任何阶段,该应用程序将以相同的方式为所有开发人员和客户端运行。
    无论是在开发,分阶段还是在生产中。

  • Docker容器如先前指出的那样,将运送自己的库和框架。
    容器化消除了手动安装库和依赖项的需要。
    您可以启动功能齐全的完整开发环境,以准备部署应用程序。

现在,让我们深入了解如何在Docker上构建Node.js应用程序。

前提条件

  • 系统上已安装Docker
  • NPM

步骤1:创建Node.js应用程序

第一步是创建一个Node.JS应用程序。
创建一个新目录并进入该目录。

$mkdir nodejs-app && cd nodejs-app

接下来,使用npm(NodeJS Package Manager)初始化目录。
这将创建一个" package.json"文件,该文件将处理应用程序的依赖项。

$npm init

系统将提示您输入应用程序的详细信息,例如名称,版本,描述等。
如果您希望保留默认值,则可以决定指定赢得的首选详细信息,只需按Enter。

在提示的末尾,键入"是"以接受更改。

接下来,运行

$npm install express –save

这将快速框架添加为第一个依赖项

步骤2.为Node.js应用程序创建文件

我们将为Node.Js应用程序创建3个文件。

  • index.js
  • index.html
  • about.html

对于" index.js"文件,添加以下内容。

const express = require('express')
const app = express()
app.get('/', ( req, res ) => {
  res.sendFile(`${__dirname}/index.html`)
})

app.get('/about', (req, res) => {
  res.sendFile(`${__dirname}/about.html`)
})
app.listen(3000, () => {
  console.log('Listening on port 3000!')
})

上面的文件为侦听端口3000的" index.html"和" about.html"页面创建了2条路由。

对于index.html文件,添加一些测试内容,如图所示。

对于" about.html"页面,添加以下内容。

我们的Node.JS应用程序现在可以启动了。

步骤3:运行Node.JS应用程序

要运行该应用程序,请运行以下命令

$node index.js

现在,打开浏览器并通过输入URL进入" index.html"页面,如下所示

https://ip-address:3000

要访问about.html页面,请在网址末尾附加/about

https://ip-address:3000/about

第4步:Docker化Node.JS应用程序

接下来,您将在容器内定义一个工作环境。
这个工作环境包括依赖项,预安装的应用程序和库,仅举几例。
与VM相比,该容器并不随整个操作系统一起提供。
它仅提供依赖项,应用程序和配置文件,因此与普通虚拟机相比,它更加轻巧,快速且资源友好。

但是,与VM相反,该容器无法容纳整个操作系统-仅包含应用程序,依赖项和配置。
这使得Docker容器比常规VM更加轻巧和快速。
在应用程序目录中创建文件dockerfile

$touch dockerfile

添加以下内容

FROM node:carbon

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["node", "index.js"]

第一行表示我们使用了最新的节点版本来构建镜像。
第二行创建了目录"/usr/src/app",用于将应用程序代码保存在镜像中。
第三和第四行复制" package.json"文件并运行" npm install"命令

COPY指令将我们的应用程序捆绑在Docker镜像中,因此在我们的案例中是我们HTML文件和index.js文件。
EXPOSE指令公开了我们的应用程序使用的3000端口。
最后,CMD指令指定了启动我们的应用程序需要运行的命令。

步骤5.构建Node.JS应用程序

现在创建了dockerfile,让我们使用以下命令构建应用。
请注意结尾处有空格和句号。

$docker build -t node-app .

-t使您可以标记docker镜像。
在此示例中,我们已将docker镜像标记为node-app

验证应用程序是否存在运行

$docker images

步骤6.运行docker容器

现在我们可以启动容器

# docker run -p 8080:3000 -d node-app

这会将应用程序重定向为通过端口8080(而不是端口3000)打开。

步骤7.将应用程序推送到Docker中心

最后一步是将节点应用程序共享到docker hub,人们可以其中访问它并下载其镜像。
为此,请确保您在`https://hub.docker.com上拥有一个帐户。
接下来,使用所示的Docker Hub凭据再次构建镜像。

# docker build -t [USERNAME]/tag .

在我们的例子中,命令将是

# docker build -t winnieondara/node-app .

其中用户名=> winnieondara图片标签=> node-app

接下来,使用您的凭据在终端上登录docker

# docker login

最后,将镜像推送到docker hub

# docker push winnieondara/node-app

恭喜你!现在,登录到您的docker帐户,并确保找到所示的Node.JS应用程序镜像。