使用 Docker 部署 Node.js 应用程序

前言

在开发 Node.js 应用程序时,使用 Docker 部署可以带来很多便利性。 Docker 容器可以在不同的环境中运行,保证了应用程序的可移植性和可重现性,且避免了很多配置上的麻烦。本文将介绍如何使用 Docker 部署 Node.js 应用程序,并分享一些实用的技巧。

准备工作

在开始 Docker 部署之前,需要确保已经安装 Docker 环境。可以从官方网站下载和安装 Docker:https://www.docker.com/products/docker-desktop

另外,我们需要一个 Node.js 应用程序的示例代码,可以从 Git 仓库中 clone 下来。这里以一个 Express 应用程序为例:

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

app.get('/', (req, res) => {
    res.send('Hello World!')
})

app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`)
})

将以上代码保存到 app.js 文件中,并在同一目录下创建一个 package.json 文件:

{
  "name": "example-app",
  "version": "1.0.0",
  "description": "An example Node.js app",
  "dependencies": {
    "express": "^4.17.1"
  }
}

安装依赖包:

$ npm install

编写 Dockerfile

Docker 可以通过 Dockerfile 文件来构建镜像。在 Node.js 项目中,我们需要编写一个 Dockerfile 文件,以描述镜像的构建过程。

在项目根目录创建一个名为 Dockerfile 的文件,并添加以下内容:

# 使用 Node.js 14 镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json 文件并安装依赖包
COPY package*.json ./
RUN npm install

# 复制整个项目到容器中
COPY . .

# 暴露端口号
EXPOSE 3000

# 启动应用程序
CMD [ "node", "app.js" ]

这个 Dockerfile 说明了以下几个步骤:

  1. 使用 Node.js 14 镜像作为基础镜像
  2. 设置工作目录为 /app
  3. 复制 package.jsonpackage-lock.json 文件到 /app 目录,并运行 npm install 命令安装依赖包
  4. 复制整个项目到容器中
  5. 暴露 3000 端口
  6. 在容器启动时运行 node app.js 命令启动应用程序

构建镜像

在 Dockerfile 定义好后,我们就可以通过 Docker 命令来构建镜像了。在命令行中进入项目根目录,并执行以下命令:

$ docker build -t example-app .

这个命令会根据 Dockerfile 的定义,构建一个名为 example-app 的镜像,并使用当前目录中的所有文件作为容器的内容。-t 选项用来为镜像设置标签,这里的标签为 .,表示当前目录。

构建完成后,可以通过以下命令来查看镜像列表:

$ docker images

运行容器

使用 Docker 运行容器时,需要指定容器中运行的镜像以及容器的配置参数。在这个示例中,我们需要指定镜像 example-app,并将容器的 3000 端口映射到本地主机的端口。

$ docker run -p 3000:3000 example-app

这个命令将会启动一个新的容器,并将容器的 3000 端口映射到宿主机的 3000 端口。此时可以在浏览器中打开 http://localhost:3000 来访问应用程序了。

使用 docker-compose

使用 docker-compose 可以更方便地管理 Docker 容器,特别是在需要启动多个容器时更为方便。我们可以通过编写一个 docker-compose.yml 文件,来描述我们希望启动的镜像及容器配置,并通过 docker-compose up 命令来启动应用程序。

在项目根目录中创建一个名为 docker-compose.yml 的文件,并添加以下内容:

version: "3.8"

services:
  app:
    build: .
    ports:
      - 3000:3000
    depends_on:
      - db

  db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: root

这个文件说明了两个服务:一个是 app 服务,通过构建当前目录下的 Dockerfile 来创建容器,并将容器的 3000 端口映射到宿主机的端口;另一个是 db 服务,它使用 MySQL 镜像创建容器,并设置环境变量、命令等配置。

在运行 docker-compose up 命令后,Docker 会根据 docker-compose.yml 文件创建并启动两个容器:

$ docker-compose up

当容器启动完成后,可以通过 http://localhost:3000 来访问应用程序。

总结

通过 Docker 部署 Node.js 应用程序,可以带来很多便利性,包括可移植性、可重现性和配置上的简化。本文介绍了如何编写 Dockerfile、构建镜像、运行容器,以及如何使用 docker-compose 管理多个容器。希望这篇文章能够对你的前端开发工作有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a6610aadd4f0e0fff27178


纠错反馈