当前位置: 首页 > 后端技术 > Node.js

使用Docker构建容器应用(一)

时间:2023-04-03 15:36:05 Node.js

Docker是一个可以将应用容器化的工具。你可以简单地将容器理解为轻如鸿毛的虚拟机。不同于传统的虚拟机,它不会给系统带来太大的负担,具有更高的可移植性和可扩展性。容器中的应用将拥有独立的文件系统,在容器中的操作不会影响到自身的宿主系统。有点类似于三体空间的小宇宙。里面可以有高度的自由运行空间,已经预设了你喜欢的装修风格(应用运行需要的环境)!我们将使用Docker构建最简单的Node容器化应用程序。这个镜像会被我们打包,上传到我们自己的Docker仓库,开箱即用。想象这样一个场景,当你的开发机器将应用程序容器化后,将容器化的镜像下载到你自己的服务器上后,你可以通过一条命令在一个完全不同的环境中运行你的应用程序。节省下来的时间让我们可以做更多自己喜欢的事情,而不是钻研一个我们可能想不通的“Linux环境问题”!第一步:下载安装Docker下载地址,希望这一步没有难倒你。第二步:写一个简单的Node应用为了足够简单,我使用了Express,它只有一个功能,在首页输出一个HelloDocker,如果对此有疑惑,可以参考源码仓库,或参考以下代码:constexpress=require('express');constapp=express();应用程序。get("/",(req,res)=>{res.end("HelloDocker!")});应用程序。listen(8000,()=>{console.log("服务器开始于http://localhost:8000");});为了保险起见,我们最好使用nodeapp.js来测试应用是否健康,启动浏览器打开http://localhost:8000后,我们就可以成功看到HelloDocker了!屏幕上输出,似乎一切都在朝着我们期待的方向发展。第三步:将Node应用打包成镜像。这一步可能会触及你的知识盲点,所以我们用比较简单易懂的方式来分析每一步需要做什么,把复杂的事情分解成多个部分。简单的步骤,我们解决复杂问题的一贯方法。我们在与应用相同的目录下新建一个Dockerfile,让这个记录器帮我们记录下接下来要做的事情。您的目录看起来应该和我的差不多:我们的应用程序需要什么?我们需要考虑的第一个问题是我们的应用程序需要什么。我们可能知道它需要一台电脑才能运行。别担心这个。Docker也需要一台电脑。我们可以拥有它可以拥有的一切。那么我们的应用程序还需要什么呢?众所周知,Docker是用Go语言实现的,那么它会不会有Node运行环境呢?不是,不是,所以我们第一步是搭建一个支持Node应用运行的环境,那么我们需要先在这个容器里面放一个Node,怎么放,一个简单的命令就可以了,在Dockerfile新增一行:#这条命令的作用是在node:10.16-alpinemirroring的基础上开始我们的镜像#alpine的包会更小,功能更少,但是已经可以满足我们的需求了#站在上面巨人的肩膀FROMnode:10.16-alpine我们需要在容器中做什么?我们的记录器Dockerfile已经帮我们记录了第一步要做什么,我们可以在第一步的基础上思考第二步要做什么。前面我们说过,容器中有一个属于我们自己的小宇宙。虽然我们不常来这个小宇宙,但我们也应该希望它能像大宇宙一样井井有条。因此,我们需要为这个容器创建一个单独的文件系统。指定一个工作目录,以便我们以后能尽快的在容器中找到我们的应用,所以让我们的记录器加一句:#这个命令的作用是指定应用在容器中的工作目录#找到为我们的应用程序一个干净的房间,它将开始其生命WORKDIR/usr/src/app指定工作目录后,我们要在其中运行我们的应用程序。在这一步中,我们需要将我们核心的app.js移动到我们docker中的工作目录中,一般我们会把整个应用放在里面,所以我们需要添加一个命令:COPY。.这样可以吗?如果你熟悉Node项目,你就会知道把所有的文件都搬进去是不明智的,至少保留node_modules,我们不需要费力地把这个“又大又重的机器”搬进来,我们只需要只需要输入“芯片(app.js)”和“使用说明(package.json)”,然后让我们的docker容器完成依赖的安装。所以我们在当前目录新建一个.dockerignore文件,填入node_modules,和.gitignore一样!现在我们已经将应用程序放入容器中,我们只需要像普通的Node项目一样运行我们的项目。回想一下,我们如何运行我们的Node项目?第一步安装依赖,第二步运行!然后我们需要在package.json的script选项中添加一行"start":"nodeapp.js"来为我们的项目指定一个启动入口。然后我们可以让记录器记录最后两条命令:#安装依赖RUNnpminstall#定义应用启动命令CMD["npm","start"]最终完整版应该是这样的:FROMnode:10.16-alpineWORKDIR/usr/src/appCOPY。.RUNnpminstallCMD["npm","start"]如何将我们的应用打包成Docker镜像?进入你的项目目录,运行一行命令#根据Dockerfile配置文件信息将应用打包成镜像#执行记录器dockerimagebuild-tmyapp:1.0记录的所有命令。打包完成后,我们用dockerimagels命令看看这个子长什么样子。它只有79.6M。与VM系统相比,轻如鸿毛,还可以更小!运行你的Docker容器!实践是检验真理的唯一标准,我们来测试一下我们的容器,能跑起来吗?(如果你想在另一台电脑上模拟运行,此时可以重启电脑,重启后你将得到一台全新的电脑!)我们现在使用一条命令来运行我们的容器:dockercontainerrun--publish8888:8000--detach--nameappmyapp:1.0在打开浏览器之前,我们先来分析一下上面的命令:dockercontainerrun:在主机上运行一个docker容器--publish:端口8888接收到的网络流量转发到里面的8000端口加工容器;(我们的应用程序运行在容器的8000端口上)--detach:在后台运行这个容器;--name:为你的容器指定一个名字,这样你就可以区分不同的容器;分析完成后,此时我们应该信心满满了,打开浏览器,输入http://localhost:8888,我们就成功了!原文地址,欢迎收录源码地址,欢迎收录