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 相关文章推荐
JS类中定义原型方法的两种实现的区别
Mar 08 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
May 17 Javascript
javascript字符串拼接的效率问题
Dec 25 Javascript
jquery中的on方法使用介绍
Dec 29 Javascript
鼠标经过tr时,改变tr当前背景颜色
Jan 13 Javascript
js使用setTimeout实现定时炸弹的方法
Apr 10 Javascript
js实现楼层效果的简单实例
Jul 15 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
基于Vue开发数字输入框组件
Dec 19 Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 Javascript
浅析vue-router中params和query的区别
Dec 24 Javascript
TypeScript 使用 Tuple Union 声明函数重载
Apr 07 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中cookie的使用方法
2014/03/29 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python实现聚类算法原理
2018/02/12 Python
python读取和保存视频文件
2018/04/16 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
python join方法使用详解
2019/07/30 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
大三自我鉴定范文
2013/10/05 职场文书
小学运动会表扬稿
2014/01/19 职场文书
小学生元旦广播稿
2014/02/21 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
布达拉宫的导游词
2015/02/02 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
Python字符串格式化方式
2022/04/07 Python