📜  如何在 Node.js 中创建 Dockerfile?

📅  最后修改于: 2022-05-13 01:56:21.521000             🧑  作者: Mango

如何在 Node.js 中创建 Dockerfile?

Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令。它类似于将多个命令收集到单个文档中以完成单个任务的 shellscript。

先决条件:在您可以对任何应用程序进行 Dockerize 之前,您需要根据您的操作系统安装 Docker 引擎。转到 https://docs.docker.com/engine/install/ 安装 Docker 引擎。根据您的操作系统下载它。

命令:我们在编写 Dockerfile 时必须知道的基本命令。

  • WORKDIR 用于指定工作路径,也就是说在图片文件中,我们目前在/app
  • COPY:用于将项目中的文件复制到镜像文件中。
  • RUN:现在已经有Node.js环境的镜像文件,以及package.json档案,然后我们可以执行npm安装所有套件的依赖项也将它们打包到镜像文件中
  • EXPOSE:在使用容器的时候,可以想象它是一个封闭的机器,所以我们需要与外界建立一个通讯通道。这里我们设置了8081端口,也就是我们常用的端口。
  • CMD:用于设置启动图像的方式。
  • PULL:用于从 Docker 存储库中添加文件。
  • VOLUME:用于创建目录挂载点以访问和存储持久数据。
  • ARG:用于定义构建时变量。
  • DOCKER BUILD:用于构建命令,用于从 Dockerfile 创建图像。
  • DOCKER PUSH:用于将图像推送到您的 Docker 存储库。

让我们通过创建一个示例 express 应用程序来创建一个简单的 DockerFile。

第 1 步:通过 Express 框架创建示例 NodeJs 应用程序。

npm init

第 2 步:让我们通过运行以下命令将 Express 框架添加为第一个依赖项。

npm i express -s

第 3 步:我们可以使用简单的 http 服务器创建server_init.js文件。

server_init.js
// Load express module using `require` directive
let express = require('express')
let app = express()
  
// Define request response in root URL (/)
app.get('/', function (req, res) {
  res.send('Dockerize the node app')
})
  
// Launch listening server on port 8081
app.listen(8081, function () {
  console.log('app listening on port 8081')
})


运行应用程序的步骤:打开终端并键入以下命令。

node server_init.js

在浏览器中访问 http://localhost:8081/ 进行查看。

现在让我们为上述示例创建一个 docker 文件:

第 1 步:让我们继续在项目的根目录为我们的演示应用程序创建一个 Dockerfile。

touch Dockerfile

第 2 步:打开 Dockerfile 并添加以下步骤。每个 Dockerfile 都必须以 FROM 指令开头。这背后的想法是你需要一个起点来建立你的形象。您可以从从公共注册表中提取的任何有效映像启动 Docker 映像。您开始使用的映像称为基础映像。在我们的例子中,让我们将 FROM node:12.16-alpine 添加到 Dockerfile。

FROM node:12.16-alpine

第 3 步:在容器中创建目录,我们将使用该目录来存储文件、运行 NPM 并启动我们的应用程序:

RUN mkdir node
COPY . ./node
WORKDIR ./node/

第 4 步:通过以下命令安装所有 NodeJs 依赖项

RUN npm install 

第 5 步:在应用示例中,我们在端口 8081 上运行 NodeJs 应用程序。

EXPOSE 8081

第 6 步:通过以下命令启动我们的 NodeJs 应用程序。

CMD node server_init.js

第 7 步:构建 Docker 映像。运行我们的应用程序的命令是

docker build -t hello-world .

第 8 步:我们可以找到我们创建的 docker 镜像。

docker image ls

通过以下命令运行应用程序

docker run -p 8081:8081 hello-world

输出:当我们运行我们在 docker 文件中编写的 docker build 步骤时,将被执行。打开浏览器并打开 localhost:8081

Push To ContainerRegistry:我们可以将镜像推送到我们的公共或私有 Registry。只需三个简单的步骤即可将镜像推送到 Dockerhub

docker login --username username --password yourpassword
docker tag localimagename username/repositoryname:tagname
docker push username/repositoryname:tagname