首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Node.js web 应用 Docker 化

小小又开始学习新的内容了。这次学习的是,把一个Node.js 应用封装到Docker容器,完成本教程的前提是拥有一个可以安装的,已经正常可以工作的Docker。以及对Node.js应用如何工作,有一个大致的了解。本教程的第一部分,需要创建一个Web应用程序,然后为这个应用程序构建一个Docker镜像,最后把这个镜像作为容器进行运行。Docker允许应用对依赖进行打包完成一个标准化的单元,这是一个容器,对于应用而言,Docker被称为一个标准的Linux操作系统,一个镜像是进行加载到容器的软件。

创建Node.js应用

首先,需要创建一个package.json文件,以及包含的依赖。

{

"name":?"docker_web_app",

"version":?"1.0.0",

"description":?"Node.js?on?Docker",

"author":?"First?Last?",

"main":?"server.js",

"scripts":?{

"start":?"node?server.js"

},

"dependencies":?{

"express":?"^4.16.1"

}

}

然后输入npm install 进行安装相关的依赖。

然后创建一个server.js 文件,创建一个web应用。

'use?strict';

const?express?=?require('express');

//?Constants

const?PORT?=?8080;

const?HOST?=?'0.0.0.0';

//?App

const?app?=?express();

app.get('/',?(req,?res)?=>?{

res.send('Hello?World');

});

app.listen(PORT,?HOST);

console.log(`Running?on?http://${HOST}:${PORT}`);

这样就完成了一个标准的,最简单的web应用。下面将需要创建一个镜像,用于对镜像进行封装。

创建一个 Dockerfile文件

touch?Dockerfile

打开文件,输入相关的基础镜像

FROM?node:12

创建相关的工作目录

#?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

复制相关的程序代码

#?Bundle?app?source

COPY?.?.

绑定相关的端口号

EXPOSE?8080

创建持久化的命令,让系统在前台运行。

CMD?[?"node",?"server.js"?]

最后Dockerfile构建如下

FROM?node:12

#?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

#?Bundle?app?source

COPY?.?.

EXPOSE?8080

CMD?[?"node",?"server.js"?]

关于dockerignore文件

此文件,是防止复制到相关的文件,例如node_modules 不需要复制到docker镜像内部

node_modules

npm-debug.log

构建docker镜像

docker?build?-t?/node-web-app?.

输入如上的命令,构建docker镜像。最后构建出的docker镜像如下

$?docker?images

#?Example

REPOSITORY??????????????????????TAG????????ID??????????????CREATED

node????????????????????????????12?????????1934b0b038d1????5?days?ago

/node-web-app????latest?????d64d3505b0d2????1?minute?ago

运行相关镜像

此时镜像已经构建完成,这里需要对镜像进行运行。

docker?run?-p?49160:8080?-d?/node-web-app

需要进入容器,输入如下的命令

#?Enter?the?container

$?docker?exec?-it??/bin/bash

测试

输入ps,可以看到docker的镜像的详细内容

$?docker?ps

#?Example

ID????????????IMAGE????????????????????????????????COMMAND????...???PORTS

ecce33b30ebf??/node-web-app:latest??npm?start??...???49160->8080

使用curl可以访问网站

$?curl?-i?localhost:49160

HTTP/1.1?200?OK

X-Powered-By:?Express

Content-Type:?text/html;?charset=utf-8

Content-Length:?12

ETag:?W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"

Date:?Mon,?13?Nov?2017?20:53:59?GMT

Connection:?keep-alive

Hello?world

此时项目已经基本完成。

浦东软件园

推荐阅读

●新知 | JavaScript 几种循环方式以及模块化的总结

●优雅 | koa处理异常

●知新 | Koa 框架从入门到熟练第二章

●学习 | egg.js 中间件和插件

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200723A0YTF100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com