Docker化你的Node.js应用程序
通过这个简短易懂的分步教程,学习如何使用代码块将 Node 应用程序 Docker 化。立即尝试!
Docker 彻底改变了我们构建、打包和交付软件的方式。Docker 使开发人员能够打包他们的应用程序并与他人共享。正是由于 Docker,我们现在看到了云计算的诸多进步。许多新兴初创公司都以 Docker 技术为基础。此外,Docker 还通过弥合开发和运营团队之间的差距,增强了 DevOps 方法。今天,我们将通过一个简单的教程,演示如何构建一个简单的“Hello World”应用程序,并对其进行 Docker 化。
先决条件:
教程
创建应用程序
创建一个目录来存储你的应用程序和依赖项。你可以选择任何你想要的名称。我选择的名称是“expapp”。
mkdir expapp
使用命令初始化应用程序npm init -y
。这将创建包含依赖项的package.json文件,以及应用程序的名称和描述。
{
"name": "expapp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha"
},
"keywords": [],
"author": "",
"license": "ISC",
}
我们将通过在项目的根目录上运行以下命令将 Express 框架添加为依赖项。
npm install express --save
添加此依赖项后,您可以返回并检查package.json文件。现在它应该已经列出了 express 依赖项。
{
"name": "expapp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.3"
}
}
添加 express 作为依赖项后,您应该会在主目录中看到另外两个文件:package-lock.json和 node_modules。由于这不是本教程的目的,因此我们不会详细介绍。如果您想了解更多信息,可以阅读本入门指南。
现在,是时候将我们的主要代码添加到app.js文件中了。
创建一个名为app.js的文件并添加以下代码:
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3002;
app.get('/', (request, response) => {
response.status(200).json({
message: 'Hello Docker!',
});
});
app.listen(PORT, () => {
console.log(`Server is up on localhost:${PORT}`);
});
在上面的文件中,我们正在配置应用程序——基本上就是使 express 成为必需的依赖项,并让应用程序启动服务器并监听 3002 端口的连接。对于根 URL (/) 或路由的请求,应用程序会返回{“message”: “Hello Docker!”}。对于其他路径,它将返回 404 Not Found 错误。
我们的简单应用程序已经准备好了。现在,我们可以运行它来测试它是否正常工作。运行该命令,当你访问http://localhost:3002/时node app.js
,你应该会看到下面的输出。
创建 Dockerfile
让我们创建一个 Dockerfile 来制作应用程序的镜像。转到应用程序的根目录,创建一个名为“ Dockerfile ”的文件,并向其中添加以下代码。
FROM node:14-alpine AS development
ENV NODE_ENV development
# Add a work directory
WORKDIR /app
# Cache and Install dependencies
COPY package.json .
RUN npm install
# Copy app files
COPY . .
# Expose port
EXPOSE 3002
# Start the app
CMD [ "node", "app.js" ]
在 Dockerfile 中,我们使用 Node:14-alpine 作为图像的模板。
将容器中的工作目录设置为 /app。我们将使用此目录存储文件、运行 npm 并启动我们的应用程序,并公开端口 3002 供应用程序运行。
最后,最后一行指定我们的应用程序将如何启动。
可选:创建一个 .dockerignore 文件,以防止本地模块和日志被复制到 Docker 镜像中。请在 .dockerignore 文件中
提及以下两项:node_modules和npm-debug.log 。
构建应用程序的图像
将文件保存到根目录后,让我们使用刚刚编写的 Dockerfile 构建一个镜像。这可以通过以下 Docker build 命令完成。
docker build -t express-app .
-t 参数用于设置 Docker 镜像的名称。
我将镜像命名为 exp-app。您可以随意命名 :)
命令成功运行后,您应该使用以下命令验证构建的镜像docker images
启动容器
图像已构建!现在是时候使用以下命令启动具有分配端口的 Docker 容器了:docker run -p 3002:3002 express-app
推送至 Docker Hub
现在,让我们将此镜像推送到我们的 Docker Hub。确保您已从终端登录到 Docker Hub。您可以使用以下命令执行此操作docker login
。
您需要使用 Docker Hub 凭据重新构建镜像。docker build -t [USERNAME]/express-app .
请在上方指定的字段中添加您的用户名,这是您的 Docker Hub 用户名。
使用 Docker Hub 凭据构建它后,使用命令将其推送到 Docker Hubdocker push [USERNAME]/express-app.
你应该会看到一个新的镜像被推送到你的 Docker Hub。你可以前往 Docker Hub 仪表板进行验证:
太棒了!现在,您可以在任何地方使用此镜像。与您的同事分享,减少在他们的机器上重建镜像的时间和精力。
通过运行以下命令验证我们是否已将正确的映像推送到 Docker Hub:docker run [USERNAME]/express-app
您应该看到应用程序在指定端口上运行,并显示以下输出:
通过访问http://localhost:3002/进行检查。
您离成为 Docker Pro 又近了一步!恭喜!您创建了一个应用程序,构建了该应用程序的映像,并将其推送到 Docker Hub 容器注册表 Hub。
不喜欢从博客文章中复制粘贴代码块?您可以在此应用程序的GitHub 存储库中查看所有代码。
您已经了解如何构建一个简单的应用程序并将其 Docker 化,下一步就是将此应用程序部署到云端。出于各种原因,我们将考虑使用 Kubernetes 作为部署此应用程序的平台。在下一篇教程中,我们将讨论如何将 Node.js 应用程序部署到 Kubernetes。您可以使用Harness 平台轻松地实现持续交付和部署的自动化。
我还将在本系列教程中向您展示如何做到这一点。
文章来源:https://dev.to/pavanbelagatti/dockerizing-your-nodejs-application-1o17