Docker 和 NodeJS:入门

2025-06-08

Docker 和 NodeJS:入门

介绍

最近,我花了很多时间在私有区块链的世界里。当你学习像这样的新技术时,你会遇到一些你必须理解的概念或原则才能继续前进。Docker 和容器对我来说似乎就是其中之一。所以,以一种“让我们写下我学到的东西”的方式,我试图解释 Docker 的功能以及我是如何开始使用它的。

容器?

Docker 是一个供开发人员使用容器开发和部署应用程序的平台。Docker 并非容器或容器化技术的发明者,但却普及了这一概念,因此它们有时被用来描述同一件事物。

容器通过运行镜像来启动。镜像是一个可执行文件,它解释了应用程序运行所需的所有内容以及在哪里/如何找到它们。容器是镜像的运行实例。这种方式比提供完整“虚拟”操作系统的虚拟机 (VM) 占用的资源更少,而虚拟机占用的资源比大多数应用程序所需的资源要多。通过将应用程序及其依赖项容器化,可以消除操作系统发行版和底层基础架构之间的差异。

Docker 和 NodeJS

理论已经讲得够多了,让我们看看如何使用 Docker 为 NodeJS 应用程序创建镜像。

首先,按照这里的说明安装 Docker 。完成后,docker --version在终端中运行。你应该看到类似以下内容:

Docker version 17.12.0-ce, build c97c6d6

如果您想确保一切正常,您可以运行:docker run hello-world。这将为您拉取hello-world镜像并启动一个容器。

您可以看到使用 所下载图像的列表docker image ls

您可以使用 查看正在运行的容器列表docker container ls,也可以使用 查看所有容器docker container ls --all。请记住,容器是您下载的镜像的实例。

因此,如果您运行hello-world镜像,假设您之前没有运行任何容器,您将在此列表中看到一个容器。如果您运行hello-world 5 次,您将拥有 5 个容器( hello-world镜像的实例)。

注意:要停止容器,请运行docker kill $(docker ps -q)。您仍然会看到带有 ` 的容器docker container ls --all。要完全删除它们,请运行docker rm $(docker ps -a -q)

NodeJS 应用程序

我们来做一件非常简单的事情。一个 Express 应用,包含 2 个路由,渲染 2 个 html 页面。创建一个名为 express-app 的新目录:

mkdir express-app && cd express-app

使用默认设置运行npm init。然后运行npm install express --save

创建 3 个文件:index.jsindex.htmlabout.html

  • index.js

` javascript
const express = require('express')
const app = express()

app.get('/', ( req, res ) => {
res.sendFile( ${__dirname}/index.html)
})

app.get('/about', (req, res) => {
res.sendFile( ${__dirname}/about.html)
})

app.listen(3000, () => {
console.log('正在监听 3000 端口!')
})
`

创建一个 express 应用程序,为我们的 html 文件设置 2 个路由并监听端口 3000。

  • 索引.html

`html
<html>
<body>
<h1>Hello Docker from index</h1>
</body>
</html>
`

  • 关于.html

`html
<html>
<body>
<h1>About page</h1>
</body>
</html>
`

好的,我们的应用完成了。运行后node index.js,你将在 localhost:3000/ 和 localhost:3000/about 上看到我们的 html 页面。

Dockerfile

为了定义容器内的环境,我们将使用Dockerfile。这是一系列指令,告诉 Docker 如何创建我们想要的镜像。

使用以下命令在您的目录中创建 Dockerfile touch Dockerfile

`

来自节点:碳

工作目录 /usr/src/app

复制包*.json ./

运行 npm install

复制 。 。

曝光 3000

CMD [“node”, “index.js”]

`

这里发生了什么?第一行表示我们要使用最新的 Node 版本来构建镜像。这就是我们开始使用的镜像。node :carbon是最新的长期支持版本。

第二行创建一个目录来保存图像内的应用程序代码。

第三行和第四行复制 package.json 文件并运行npm install命令。第一行提供了 node.js 和 npm。因此我们安装依赖项,在本例中仅安装 express.js。注意,我们不会复制/node_modules 文件。

COPY指令将我们的应用程序捆绑在 Docker 镜像中,因此在我们的例子中是我们的 html 文件和 index.js 文件

EXPOSE指令公开我们的应用程序使用的 3000 端口。

最后,CMD指令指定我们的应用程序启动时需要运行哪个命令。

建造

现在一切准备就绪,我们可以构建应用程序了。

跑步docker build -t node-app .

-t标签允许你为 Docker 镜像指定一个友好名称。你应该在终端中看到类似这样的内容:

`
将构建上下文发送到 Docker 守护进程 21.5kB
步骤 1/7:FROM node:carbon
---> 41a1f5b81103
步骤 2/7:WORKDIR /usr/src/app
---> 使用缓存
---> ffe57744035c
步骤 3/7:COPY package*.json ./
---> 使用缓存
---> c094297a56c2
步骤 4/7:RUN npm install
---> 使用缓存
---> 148ba6bb6f25
步骤 5/7:COPY . .
---> 使用缓存
---> 0f3f6d8f42fc
步骤 6/7 :EXPOSE 3000
---> 使用缓存
---> 15d9ee5bda9b
步骤 7/7 :CMD ["node", "index.js"]
---> 使用缓存
---> 154d4cd7e768
成功构建 154d4cd7e768
成功标记 node-app:latest

`

现在,如果你运行。你将在列表中docker image ls看到你的node-app 。

启动容器

现在我们可以启动容器了。运行docker run -p 8080:3000 -d node-app

-d标志以分离模式运行应用程序。-p 8080:3000将公共端口重定向到私有端口。8080 是私有端口,3000 是我们导出的公共端口。

转到 localhost:8080,您的应用程序正在运行!

现在,运行docker run -p 10000:3000 -d node-app,然后docker run -p 4000:3000 -d node-app

打开 localhost:10000 和 localhost:4000,你会发现你的 node-app 镜像有三个不同的实例同时运行!为了确认这一点,你可以运行它,docker container ls看看你的三个容器在不同端口上运行着同一个镜像。

好了,以上就是对 Docker 的简单介绍。祝您玩得开心!

补充:我忘了提了,其实我应该提一下。你应该创建一个.dockerignore文件,并在其中添加node_modules,告诉 Docker 你不想复制这个文件夹,因为我们复制的是package.json文件并运行npm install。省略它也可以,但加上它更有意义 ;)

鏂囩珷鏉ユ簮锛�https://dev.to/damcosset/docker-and-nodejs-getting-started-3kao
PREV
不要忘记你来自哪里...
NEXT
区块链:区块里有什么?