小小又开始学习新的内容了。这次学习的是,把一个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.jsonDocker","author":"FirstLast<first.last@>","main":"server.js","scripts":{"start":"nodeserver.js"},"dependencies":{"express":"^4.16.1"}}
然后输入npm install 进行安装相关的依赖。
然后创建一个server.js 文件,创建一个web应用。
"usestrict";constexpress=require("express");//ConstantsconstPORT=8080;constHOST="0.0.0.0";//Appconstapp=express();app.get("/",(req,res)=>{res.send("HelloWorld");});app.listen(PORT,HOST);console.log(`Runningonhttp://${HOST}:${PORT}`);
这样就完成了一个标准的,最简单的web应用。下面将需要创建一个镜像,用于对镜像进行封装。
创建一个 Dockerfile文件
touchDockerfile
打开文件,输入相关的基础镜像
FROMnode:12
创建相关的工作目录
#CreateappdirectoryWORKDIR/usr/src/app
复制相关的包管理文件,并安装相关的依赖
#Installappdependencies#Awildcardisusedtoensurebothpackage.jsonANDpackage-lock.jsonarecopied#whereavailable(npm@5+)COPYpackage*.json./RUNnpminstall#Ifyouarebuildingyourcodeforproduction#RUNnpmci--only=production
复制相关的程序代码
#BundleappsourceCOPY..
绑定相关的端口号
EXPOSE8080
创建持久化的命令,让系统在前台运行。
CMD["node","server.js"]
最后Dockerfile构建如下
FROMnode:12#CreateappdirectoryWORKDIR/usr/src/app#Installappdependencies#Awildcardisusedtoensurebothpackage.jsonANDpackage-lock.jsonarecopied#whereavailable(npm@5+)COPYpackage*.json./RUNnpminstall#Ifyouarebuildingyourcodeforproduction#RUNnpmci--only=production#BundleappsourceCOPY..EXPOSE8080CMD["node","server.js"]
关于dockerignore文件
此文件,是防止复制到相关的文件,例如node_modules 不需要复制到docker镜像内部
node_modulesnpm-debug.log
构建docker镜像
dockerbuild-t<yourusername>/node-web-app.
输入如上的命令,构建docker镜像。最后构建出的docker镜像如下
$dockerimages#ExampleREPOSITORYTAGIDCREATEDnode121934b0b038d15daysago<yourusername>/node-web-applatestd64d3505b0d21minuteago
运行相关镜像
此时镜像已经构建完成,这里需要对镜像进行运行。
dockerrun-p49160:8080-d<yourusername>/node-web-app
需要进入容器,输入如下的命令
#Enterthecontainer$dockerexec-it<containerid>/bin/bash
测试
输入ps,可以看到docker的镜像的详细内容
$dockerps#ExampleIDIMAGECOMMAND...PORTSecce33b30ebf<yourusername>/node-web-app:latestnpmstart...49160->8080
使用curl可以访问网站
$curl-ilocalhost:49160HTTP/1.1200OKX-Powered-By:ExpressContent-Type:text/html;charset=utf-8Content-Length:12ETag:W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"Date:Mon,13Nov20:53:59GMTConnection:keep-aliveHelloworld
此时项目已经基本完成。
相关推荐
JavaScript 启动性能瓶颈分析与解决方案
从零看清Node源码createServer和负载均衡整个过程
【项目实战】sass使用进阶篇(下)
【项目实战】sass使用基础篇(上)
最详细的从零开始配置 TypeScript 项目的教程
5 款非常好用的开源 Docker 工具
WebSocket 全面知识补全
7个处理JavaScript值为undefined的技巧
immutablejs 是如何优化我们的代码的?
Chrome 新功能尝鲜!— CSS Overview
又一个布局利器, CSS 伪类 :placeholder-shown
封装一个vue视频播放器组件
对于组件的可重用性,大佬给出来6个建议
学习 TS 不要错过的八个工具
Node 中的全链路式日志标记及处理
使用 Node 开发服务器项目时如何高效地打日志?
用TypeScript学设计模式(享元模式)
用TypeScript学设计模式(模板方法模式)
TypeScript 设计模式之适配器模式
用TypeScript学设计模式(观察者模式)
用TypeScript学设计模式(单例模式)
点在看的人特别帅/美
如果觉得《Node.js web 应用 Docker 化步骤》对你有帮助,请点赞、收藏,并留下你的观点哦!