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 相关文章推荐
基于JQuery制作的产品广告效果
Dec 08 Javascript
jQuery获取标签文本内容和html内容的方法
Mar 27 Javascript
Javascript常用小技巧汇总
Jun 24 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
JavaScript jquery及AJAX小结
Jan 24 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
javascript 分号总结及详细介绍
Sep 24 Javascript
微信小程序 form组件详解
Oct 25 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
vue项目中使用scss的方法步骤
May 16 Javascript
vue输入框使用模糊搜索功能的实现代码
May 26 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
用header 发送cookie的php代码
2007/03/16 PHP
在php MYSQL中插入当前时间
2008/04/06 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
用python代码做configure文件
2014/07/20 Python
python实现连接mongodb的方法
2015/05/08 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
PyTorch预训练的实现
2019/09/18 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
模具专业推荐信
2013/10/30 职场文书
外企办公室竞聘演讲稿
2013/12/29 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android