Node.js web Docker 化

从零搭建CTF-Web渗透测试环境:蚁剑与Docker靶场实战指南 Web渗透测试是网络安全领域的核心技能,其本质在于通过模拟攻击来发现和验证Web应用的安全漏洞。其基本原理涉及对HTTP协议、服务器端脚本(如PHP)以及数据库交互的深入理解。掌握这项技术对于培养安全防御思维、提升系统安全水位具有重要价值,广泛应用于安全研究、渗透测试工程师培训和CTF竞赛等场景。本文聚焦于构建一个安全、隔离的本地练习环境,通过整合Node.js运行时、Docker容器化技术以及中国蚁剑(AntSword)这一强大的Webshell管理工具,手把手演示如何从环境准备、软件配置到漏洞利用进行全 阅读详情

本示例的目标是给你演示如何将一个 Node.js 的应用装入到 Docker 容器中。本教程旨在针对于开发人员,而 非 产品发布人员。此教程同样假定你有一个可以正常工作的 Docker 安装,并且对于 Node.js 的应用程序是如何组织的有一个大致的基本了解。

在本教程的第一部分我们在 Node.js 中创建一个 Web 的应用程序,然后我们为那个应用构建一个 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"
  }
}

配合着你的 package.json 请运行 npm install。如果你使用的 npm 是版本 5 或者之后的版本,这会自动生成一个 package-lock.json 文件,它将一起被拷贝进入你的 Docker 镜像中。

然后,创建一个 server.js 文件,使用 Express.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}`);

在稍后的步骤中我们将看一下借助使用官方的 Docker 镜像,你如何在 Docker 镜像中运行这个应用。首先,你需要一个构建一个应用程序的 Docker 应用。

创建一个名称为 Dockerfile 的文件

该文件内容如下:

我们要做的第一件事是定义我们需要从哪个镜像进行构建。这里我们将使用最新的 LTS(长期服务器支持版),Node 的版本号为 12。你可以从 Docker 站点 获取相关镜像.

FROM node:12

下一步在镜像中创建一个文件夹存放应用程序代码,这将是你的应用程序工作目录:

# Create app directory
WORKDIR /usr/src/app

此镜像中 Node.js 和 NPM 都已经安装,所以下一件事对于我们而言是使用 npm 安装你的应用程序的所有依赖。

请注意,如果你的 npm 的版本是 4 或者更早的版本,package-lock.json 文件将不会自动生成。

# 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

请注意,我们只是拷贝了 package.json 文件而非整个工作目录。这允许我们利用缓存 Docker 层的优势。bitJudo 对此有一个很好的解释,请见此。 进一步说,对于生产环境而言,注释中提及的 npm ci 命令协助提供了一个更快、可靠、可再生的构建环境。欲知详情,可以参考此处。

在 Docker 镜像中使用 COPY 命令绑定你的应用程序:

# Bundle app source
COPY . .

你的应用程序绑定的端口为 8080,所以你可以使用 EXPOSE 命令使它与 docker 的镜像做映射:

EXPOSE 8080

最后但同样重要的事是,使用定义运行时的 CMD 定义命令来运行应用程序。这里我们使用最简单的 npm start 命令,它将运行 node server.js 启动你的服务器。

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 文件

在 Dockerfile 的同一个文件夹中创建一个 .dockerignore 文件,内容如下。

node_modules
npm-debug.log

这将避免你的本地模块以及调试日志被拷贝进入到你的 Docker 镜像中,以至于把你镜像原有安装的模块给覆盖了。

构建你的镜像

进入到 Dockerfile 所在的那个目录中,运行以下命令构建 Docker 镜像。开关符 -t 让你标记你的镜像,以至于让你以后很容易地用 docker images 找到它。

docker build -t <your username>/node-web-app .

Docker 现在将给出你的镜像列表:

$ docker images

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

运行镜像

使用 -d 模式运行镜像将以分离模式运行 Docker 容器,使得容器在后台自助运行。开关符 -p 在容器中把一个公共端口导向到私有的端口,请用以下命令运行你之前构建的镜像:

docker run -p 49160:8080 -d <your username>/node-web-app
# Get container ID
$ docker ps

# Print app output
$ docker logs <container id>

# Example
Running on http://localhost:8080

如果你需要进入容器中,请运行 exec 命令:

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

测试

为测试你的应用程序,给出与 Docker 映射过的端口号:

$ docker ps

# Example
ID            IMAGE                                COMMAND    ...   PORTS
ecce33b30ebf  <your username>/node-web-app:latest  npm start  ...   49160->8080

在上面的例子中,在容器中 Docker 把端口号 8080 映射到你机器上的 49160 。

现在你可以使用 curl(如果需要的话请通过 sudo apt-get install 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

我们希望本教程能够帮助你起步,在 Docker 中运行一个简单的 Node.js 应用程序。

你也可以在以下一些地方寻觅到更多有关于 Docker 和基于 Docker 的 Node.js 相关内容:

NAS玩家必备:用Node.js脚本批量整理Calibre-Web图书信息(附完整代码) 本文为NAS玩家提供使用Node.js脚本批量整理Calibre-Web图书信息的完整解决方案,包含环境配置、API接口获取、核心脚本编写及高级功能扩展。通过axios和Node.js实现自动化批量修改,解决电子书信息混乱问题,提升图书管理效率。附完整代码和实战技巧。 阅读详情

相关推荐

VisualUIEditor:基本电子跨平台,wcDocker的dock组件的开源UI编辑器

#VisualUIEditor 游戏的UIEditor,基于电子。 #安装 首先安装node.js npm install -gelectron-prebuilt@1.3.4 npm install -g凉亭 凉亭安装 npm安装 #run在项目根目录中打开shell并运行 电子。 #开始于项目菜单->文件->打开项目(选择目录底下的project-test)即可进行测试 #基于项目基本electron跨平台,wcDocker的dock组件,以及cocos-html5的渲染层 #已实现的功能 控件拖拽使用 控件的快速移动,缩放,属性更改 图片的快速预览 坐标点,快速的定位当前鼠标对应

npm install命令各个参数的区别

dependencies与devDependencies的区别:  首先要明确package.json中dependencies字段与devDependencies字段的区别,不同参数效果的不同也主要体现在这两个字段上: dependencies:它包含的依赖包是需要发布到生产环境中的,是项目正常运行必须依赖的包。 devDependencies:它包含的依赖包只在开发时使用,不用于生产环境,如果只需要项目正常运行,则不必安装这里面的包。 npm install package 安装单个包到项目中:

lxow456的博客 2691

nodejs-docker-best-practices:使用Docker容器化Node.js Web应用程序的最佳实践

nodejs-docker-最佳实践 使用Docker容器化Node.js Web应用程序的最佳实践

简单的 Python Web 应用 Docker 化案例

在这个案例中,我们将展示如何使用 Docker 容器化一个简单的 Python Web 应用。我们将创建一个基于 Flask 框架的 Hello World 应用,并使用 Docker 和 Docker Compose 管理容器化环境。通过这个案例,你学会了如何使用 Docker 和 Docker Compose 来容器化一个简单的 Python Web 应用。首先,创建一个简单的 Python Flask 应用,用于展示一个简单的 Hello World 页面。Flask 应用将在。

美味小鱼的杂货铺 1173

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

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

OpenHarmony自定义Launcher

OpenHarmony源码版本:4.0release开发板:DAYU / rk3568DevEco Studio版本:4.0.0.600切换分支为OpenHarmony-4.0-Release,并下载源码。

Abner_Crazy的博客 1629

Docker化Node.js Web应用程序

docker 官网https://docs.docker.com/get-started/part3/ 此示例的目的是向您展示如何将Node.js应用程序放入Docker容器中。该指南旨在用于开发,而不用于生产部署。本指南还假设您已经安装了Docker,并且对Node.js应用程序的结构有了基本的了解。 在本指南的第一部分中,我们将在Node.js中创建一个简单的Web应用程序,然后我们将为...

sun 431

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

【Docker-Day 9】实战终极指南:手把手教你将 Node.js 应用容器化

本篇文章是 Docker 学习之路的第一个综合性实战,我们将把理论付诸行动,手把手、一步步地将一个真实的 Node.js Web 应用进行容器化。本文旨在通过一个完整的案例,贯穿 Dockerfile 的编写、优化、构建、运行与调试全流程,不仅会展示一个“能用”的方案,更会引导你走向“好用”和“高效”的最佳实践,例如运用多阶段构建和非 Root 用户提升镜像质量。无论你使用 Node.js、Python 还是 Go,本文传授的核心思想与方法都将为你打下坚实的容器化基础。

吴师兄大模型的博客 1262

MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍)

本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。

kafka6courier的博客 245

FMCW雷达基本原理(通俗易懂)篇2

FMCW雷达(Frequency Modulated Continuous Wave Radar)是一种使用频率调制连续波的雷达系统。它使用一个发射器发射一个连续波,但是这个连续波的频率会在一定的范围内不断变化。当这个连续波遇到一个目标物体并被反射回来时,接收器会检测到这个反射波的频率变化,并计算出目标物体的距离和速度等信息。FMCW雷达的原理可以理解为:1.发射器发射一个连续波,这个波的频率会从一个固定的起始频率开始,逐渐变化至一个固定的终止频率。

研二小学鸡的博客 7687

教你使用Docker容器化Node.js应用程序

容器化应用程序在当今世界越来越流行,因为它们能够解决几乎每个项目团队都面临的一些主要问题。 在本文中,我将告诉你如何使用Docker容器化你的node.js应用程序。在继续之前,请确保你的计算机中已安装Docker。 Docker:https://www.docker.com/products/docker-desktop 完成安装过程后,打开Docker Desktop(保持此后台运行)和运行 docker version,验证安装是否完成。 在本教程中,我使用的是具有较少依赖关系的基本no

u014389734的博客 637

AI辅助专利撰写实战:用Codex 30分钟生成发明专利初稿

这次我们来看一个用 Codex 从零开始撰写发明专利的实战项目。对于技术研发人员、产品经理或初创团队来说,专利申请是保护创新成果、构建技术壁垒的关键一步。然而,撰写一份高质量的专利申请书,尤其是权利要求书和说明书,往往需要专业的法律和技术语言,耗时耗力。这个项目演示了如何利用 AI 工具 Codex,在短时间内生成一份结构完整、逻辑清晰、具备授权潜力的专利申请文件初稿。 整个过程的核心不是让 AI 完全替代专利代理人,而是将其作为强大的“技术翻译”和“内容生成”助手。它能将你的技术构思、流程图、核心算法或产

weixin_32181267的博客 413

把一个 Node.js web 应用程序给 Docker 化

创建helloworld应用程序 创建package.json 文件touch 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":

baidu_40245966的博客 375

Unity零基础到入门☀️| 万字教程 讲解Unity中的数据存储 PlayerPrefs、XML、JSON【建议收藏】

本文章是Unity零基础到入门专栏的系列文章。 适合对Unity3D引擎感兴趣的小伙伴学习,偏向于新手学习! 本篇文章就来介绍一下Unity中三种基本的数据存储方式:PlayerPrefs、XML、JSON

努力前行,总会成为自己心中的那道光 8万+

Easy系列PLC远程IO模块的安装配置和地址访问(EtherCAT总线)

EtherCAT分布式时钟DC(SOEM源码解析)EtherCAT分布式时钟DC(SOEM源码解析)_soem dc同步-优快云博客文章浏览阅读1.2k次。分布式时钟(DC,Dsitributed Clock)可以使所有 EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。_soem dc同步1200PLC连接分布式IO组态编程应用(ES200SP固件版本不同解决方法)

RXXW_Dor的博客 171

嵌入式内存避坑指南:从栈堆分配到Cache一致性排查

内存是嵌入式系统稳定性的基石,也是从裸机到Linux开发中极易踩坑的环节。理解栈、堆、静态区的分配机制,掌握malloc与内存池的设计原理,才能从源头规避野指针与内存碎片。随着系统引入DMA和Cache,数据一致性问题随之而来,Clean/Invalidate操作、内存屏障和DMA映射都成为保障数据正确性的关键。在实际工程中,内存泄漏往往表现为设备运行数日后死机或性能劣化,借助Valgrind、AddressSanitizer、/proc/meminfo等工具能高效定位问题;而嵌入式Linux环境下还需理解

weixin_33860528的博客 339

基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(项目资料ID:4)

本研究旨在设计一款高度智能化的智能小车系统,通过集成 STM32 微控制器、ESP8266 无线模块、手机 APP 以及阿里云平台,实现环境数据实时采集、远程精准控制和高效的数据交互。详细阐述系统各部分的设计原理、实现过程和测试结果,验证系统在实际应用中的可行性和有效性,为智能小车在多领域的应用提供技术支持。

以培养嵌入式工程师为己任 1万+

docker部署node容器

把一个 Node.js web 应用程序给 Docker 化文档 介绍文档 1、 下载Docker Desktop:下载链接 2、 而后启动docker 3、 新建项目,在文件夹中新建Dockerfile和.dockerignore 4、 建立镜像:docker build –t {镜像名} . (不能忽略后面的.) 5、 运行容器:docker run –it {镜像名} ...

果酱的博客 1334

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

web vue 项目 Docker化部署

本文详细介绍了Web项目Docker化部署的全流程。主要内容包括:1) 使用Node.js镜像进行构建阶段,安装依赖并生成静态文件;2) 采用Nginx镜像的生产阶段部署静态文件;3) 通过Dockerfile实现多阶段构建的配置详解;4) 镜像构建和容器运行的实操命令;5) 不同环境的配置管理方案。教程涵盖了从项目构建到最终部署的关键步骤,通过容器化技术实现了Web项目的标准化部署流程,特别适合需要快速搭建可移植部署环境的开发者参考。

小韩的博客 1355

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用docker+node.js或dsh desktop安装deepseek harness

本文介绍通过Docker容器化部署DeepSeekHarness(dsh)的完整流程。主要内容包括:1)解决Windows环境下Docker的WSL虚拟化报错问题;2)使用Alpine版Node.js镜像搭建容器环境;3)安装Python等编译依赖并全局安装dsh;4)通过修改dsh-web-app源码解除IP限制;5)容器镜像的保存与管理技巧。关键步骤涉及虚拟化环境配置、Docker镜像拉取、容器持久化保存(docker commit)以及端口映射等操作,最终实现在本地3080端口访问dsh服务。文档提供

oushaojun2的专栏 742

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Docker部署TuxMate教程:3步搭建本地批量安装工具

TuxMate是一款强大的Linux批量应用安装工具,能够帮助用户快速部署多个应用程序,极大简化了Linux系统的初始化配置过程。通过Docker容器化部署,你可以在任何支持Docker的Linux发行版上轻松搭建这个工具。 ## 准备工作:安装Docker环境 在开始部署TuxMate之前,确保你的系统已经安装了Docker和Docker Compose。如果尚未安装,可以使用以下命令快速安

gitblog_00967的博客 1184

Ubuntu 22.04 Web开发环境

- **操作系统**: Ubuntu 22.04 LTS - **预设软件**: Node.js 18, Python 3.10, Docker, VS Code Server - **内存需求**: 最低4GB,推荐8GB - **存储空间**: 20GB - **网络配置**: NAT + SSH端口转发 ## 安装的软件包 - 开发工具: git, curl, wget, build-es...

gitblog_00042的博客 681

5分钟搭建生产级Web应用环境:passenger-docker终极指南

passenger-docker是一套专为Ruby、Python、Node.js和Meteor Web应用设计的Docker基础镜像,旨在简化Web应用的Docker化流程,让开发者能够快速构建稳定可靠的生产环境。通过预配置的Phusion Passenger服务器和优化的系统设置,即使是Docker新手也能轻松部署企业级应用。 ## 🚀 为什么选择passenger-docker? 传统D

gitblog_01060的博客 398

构建可定制化数字展示系统的技术实践

在现代Web应用中,数字展示功能虽然看似简单,但实现一个既美观又具有高度可定制性的计数系统却需要精心设计。本文将深入解析一个基于Node.js的萌系计数器项目,探讨其架构设计、主题扩展机制和部署方案。 ## 技术架构深度解析 该计数器系统采用模块化设计,核心架构分为三个主要层次: **前端展示层**:使用Pug模板引擎构建响应式界面,支持动态主题切换。每个数字字符都对应独立的图像资源,确保在

gitblog_00077的博客 465

Golang 极简的开发和快速部署入

本文从 Golang 开始到 docker 镜像 构建部署,讲解其过程。本文从 golang 安装到与 Node.js 社区的 express 和 koa 构建结果进行对比。

CTZL123456的博客 1188
上一篇: beeline: 新版连接Hive server的工具
下一篇: redis-migrate-tool 备份和恢复redis data
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值