Node.js web 应用如何封装到Docker容器中


Posted in Javascript onSeptember 01, 2020

小小又开始学习新的内容了。这次学习的是,把一个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 <first.last@example.com>",
 "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 <your username>/node-web-app .

输入如上的命令,构建docker镜像。

最后构建出的docker镜像如下

$ docker images

# Example
REPOSITORY      TAG  ID    CREATED
node       12   1934b0b038d1 5 days ago
<your username>/node-web-app latest  d64d3505b0d2 1 minute ago

运行相关镜像

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

docker run -p 49160:8080 -d <your username>/node-web-app

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

# Enter the container
$ docker exec -it <container id> /bin/bash

测试

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

$ docker ps

# Example
ID   IMAGE        COMMAND ... PORTS
ecce33b30ebf <your username>/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

以上就是Node.js web 应用如何封装到Docker容器中的详细内容,更多关于Node.js 应用封装到Docker容器的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
node.js中的emitter.emit方法使用说明
Dec 10 Javascript
javascript中Function类型详解
Apr 28 Javascript
JavaScript 对象字面量讲解
Jun 06 Javascript
基于JavaScript实现树形下拉框
Aug 10 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
Sep 20 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
vue2.0实现前端星星评分功能组件实例代码
Feb 12 Javascript
浅谈Node.js 中间件模式
Jun 12 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
Sep 26 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
Feb 12 Javascript
vue中利用iscroll.js解决pc端滚动问题
Feb 15 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 #Javascript
Vue 使用typescript如何优雅的调用swagger API
Sep 01 #Javascript
vue路由切换时取消之前的所有请求操作
Sep 01 #Javascript
jQuery实现动态加载瀑布流
Sep 01 #jQuery
vue Treeselect下拉树只能选择第N级元素实现代码
Aug 31 #Javascript
vue treeselect获取当前选中项的label实例
Aug 31 #Javascript
vue 监听 Treeselect 选择项的改变操作
Aug 31 #Javascript
You might like
PHP中实现图片的锐化
2006/10/09 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
php实现encode64编码类实例
2015/03/24 PHP
php表单提交实例讲解
2015/11/12 PHP
摘自启点的main.js
2008/04/20 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python数据挖掘需要学的内容
2019/06/23 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
制作部班长职位说明书
2014/02/26 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
班级学习计划书
2014/04/27 职场文书
岗位明星事迹材料
2014/05/18 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
三严三实学习心得体会
2014/10/13 职场文书
婚礼父母答谢词
2015/01/04 职场文书
七年级数学教学反思
2016/02/17 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL