Docker 是一种跨平台的虚拟化技术,提供操作系统级别的虚拟化以在云上运行应用程序。它使开发人员能够将他们的应用程序作为容器交付并避免系统冲突。

[使用 Docker 部署 Express API](https://res.cloudinary.com/practicaldev/image/fetch/s--_sIV6PAB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/p2hlebttob2ruv4siy8a.png)

Docker 容器可以通过 DockerHub 发布,也可以使用 zip 文件在本地分发。在撰写本文时,DockerHub 托管了超过一百万个公共 Docker 容器和镜像。

设置我们的 Express API

我们的 Express API 非常简单,只包含一个 GET 路由,它会说 hello 消息。

这就是我的index.js文件的样子。

[index.js 文件](https://res.cloudinary.com/practicaldev/image/fetch/s--jiLUhWr3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/jcqeyq284w4ye7ly1oml.png)

现在,创建一个名为 Dockerfile 的新文件并将以下代码粘贴到其中。

FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Copy package.json
COPY package*.json ./

# Install dependencies
RUN yarn install

# Copy all files
COPY . .

# Expose port 3000
EXPOSE 3000

# Run app
CMD [ "node", "index.js" ]

进入全屏模式 退出全屏模式

上述文件内容的细分。

  • FROM Node:16 将从 DockerHub 拉取 Node v16 镜像

  • WORKDIR /usr/src/app - 这是我们的应用程序在容器内的位置

  • COPY package*.json ./ — 将 package.json 从本地目录复制到 docker 映像。

  • RUN yarn install — 这将安装所有依赖项。

  • 副本。 . — 这会将所有项目文件复制到 Docker 映像中。

  • EXPOSE 3000 - 这将分配一个 docker 容器来使用端口 3000

  • CMD [ “node”, “index.js”] - 这将启动 Node JS 应用程序。

Dockerignore 文件:

现在创建一个 .dockerignore 文件并在其中添加以下内容。

node_modules
yarn*.log

进入全屏模式 退出全屏模式

.gitignore类似,这将在构建 docker 映像时忽略下面提到的文件。

构建 Docker 镜像:

完成上述过程后,我们必须将项目构建为 docker 映像才能使用它。

可以使用单行命令构建 Docker 映像。

docker build . -t="timeless-hello-world"

进入全屏模式 退出全屏模式

运行 Docker 镜像:

docker run -d -p 3000:3000 --name my-app timeless-hello-world

进入全屏模式 退出全屏模式

上述命令的分解:

  • -d 将在成功运行后分离终端。否则,如果我们关闭终端,服务器将停止。

  • -p 3000:3000 是我们希望应用程序运行的端口。

  • --name my-app 是容器的名称。

  • 最后,timeless-hello-world 就是我们上一步构建的docker镜像。

  • 一旦按下回车键。系统将提示您输入容器 ID。

我们还可以使用 docker ps 命令验证容器是否正在运行。

如果你在浏览器中打开http://localhost:3000,你会得到这样的 API 响应。

[API 响应](https://res.cloudinary.com/practicaldev/image/fetch/s--TQaSiZ_m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/fuyyyey58t1qmr4ta3fr.png)

这就是本文的内容。希望这将有助于使用 docker 部署您的 Express API。

随意评论您的想法,如果您遇到任何困难,请告诉我。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐