从头开始创建一个简单的Node.js Hello World Docker容器的教程

46 阅读2分钟

Dockerfile介绍文章中,我介绍了一个简单的Node.js Dockerfile例子。

FROM node:14
WORKDIR /usr/src/app
COPY package*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]

注意:在CMD 行中使用双引号。单引号会导致错误。

让我们使用这个Dockerfile来构建一个镜像,然后运行容器

我将在dev/docker/examplenode 文件夹中创建这个文件。我在app.js 文件中创建一个简单的Node.js应用,使用Express。

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

app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Server ready'))

超级简单,但我们有一个依赖性。我需要把它添加到package.json 文件中,所以我运行了

npm init -y
npm install express

现在你可以运行node app.js ,并确保它工作。

停止这个进程,让我们从中创建一个Docker Image。

你所需要的是app.js,package.jsonpackage-lock.json 文件。

还有Docker文件。在同一文件夹中创建一个Dockerfile 文件,没有扩展名(不是Dockerfile.txt)。

你可以自由地删除现在包含Express库及其依赖关系的node_modules 文件夹,但你也可以创建一个.dockerignore 文件,并在其中添加node_modules ,以使Docker完全忽略这个文件夹。

它的作用与Git中的.gitignore

运行命令

docker build -t examplenode .

下载Node镜像和运行npm install ,需要一段时间,然后你会得到一个成功的消息。

值得注意的是,在你第一次下载一个基础镜像,比如我们在这里使用的node ,那会被缓存在本地,所以你不需要再次下载,镜像构建过程会快很多。

现在我们可以从该镜像中运行一个容器。

docker run -d -p 3000:3000 --name node-app examplenode

现在你可以看到镜像在Docker Desktop中运行。

而且你可以点击 "在浏览器中打开 "按钮,打开运行在3000端口的应用程序。

就像以前一样!除了现在应用程序在它自己的容器中运行,完全隔离,我们可以在容器中运行任何我们想要的Node版本,并拥有Docker给我们的所有好处。

例如,你可以移除容器,在80端口而不是3000端口上运行它。

docker run -d -p 80:3000 --name node-app examplenode

镜像不需要改变,你所改变的只是端口映射。这就是结果。