容器化 Deno 应用程序
先决条件
- 你需要一个 Git 客户端。本节中的示例使用基于命令行的 Git 客户端,但你可以使用任何客户端。
概述
长期以来,Node.js 一直是服务器端 JavaScript 应用程序的首选运行时。然而,近年来出现了新的替代运行时,包括 Deno。与 Node.js 一样,Deno 也是一个 JavaScript 和 TypeScript 运行时,但它采用了一种全新的方法,具有现代安全特性、内置的标准库以及对 TypeScript 的原生支持。
为什么使用 Docker 开发 Deno 应用程序?拥有多种运行时选择令人兴奋,但在不同环境中一致地管理多种运行时及其依赖关系可能很棘手。这就是 Docker 的价值所在。使用容器按需创建和销毁环境可以简化运行时管理并确保一致性。此外,随着 Deno 的不断发展和演进,Docker 有助于建立一个可靠且可重现的开发环境,最大限度地减少设置难题并简化工作流程。
获取示例应用程序
克隆示例应用程序以配合本指南使用。打开终端,切换到你想要工作的目录,然后运行以下命令来克隆仓库
$ git clone https://github.com/dockersamples/docker-deno.git && cd docker-deno
你的 deno-docker
目录中现在应该包含以下内容。
├── deno-docker/
│ ├── compose.yml
│ ├── Dockerfile
│ ├── LICENSE
│ ├── server.ts
│ └── README.md
理解示例应用程序
示例应用程序是一个简单的 Deno 应用程序,它使用 Oak 框架创建一个简单的 API,返回 JSON 响应。该应用程序监听 8000 端口,当你通过浏览器访问应用程序时,它会返回消息 {"Status" : "OK"}
。
// server.ts
import { Application, Router } from "https://deno.land/x/oak@v12.0.0/mod.ts";
const app = new Application();
const router = new Router();
// Define a route that returns JSON
router.get("/", (context) => {
context.response.body = { Status: "OK" };
context.response.type = "application/json";
});
app.use(router.routes());
app.use(router.allowedMethods());
console.log("Server running on http://localhost:8000");
await app.listen({ port: 8000 });
创建 Dockerfile
在 Dockerfile 中,你会注意到 FROM
指令使用 denoland/deno:latest
作为基础镜像。这是 Deno 的官方镜像。该镜像 可在 Docker Hub 上获取。
# Use the official Deno image
FROM denoland/deno:latest
# Set the working directory
WORKDIR /app
# Copy server code into the container
COPY server.ts .
# Set permissions (optional but recommended for security)
USER deno
# Expose port 8000
EXPOSE 8000
# Run the Deno server
CMD ["run", "--allow-net", "server.ts"]
除了将 denoland/deno:latest
指定为基础镜像外,Dockerfile 还
- 将容器中的工作目录设置为
/app
。 - 将
server.ts
复制到容器中。 - 将用户设置为
deno
,以便以非 root 用户运行应用程序。 - 暴露端口 8000,允许流量访问应用程序。
- 使用
CMD
指令运行 Deno 服务器。 - 使用
--allow-net
标志允许应用程序进行网络访问。server.ts
文件使用 Oak 框架创建一个简单的 API,监听 8000 端口。
运行应用程序
确保你在 deno-docker
目录中。在终端中运行以下命令来构建和运行应用程序。
$ docker compose up --build
打开浏览器并在 http://localhost:8000 查看应用程序。你将在浏览器中看到消息 {"Status" : "OK"}
。
在终端中,按 ctrl
+c
停止应用程序。
在后台运行应用程序
你可以通过添加 -d
选项使应用程序在终端中分离运行。在 deno-docker
目录中,在终端中运行以下命令。
$ docker compose up --build -d
打开浏览器并在 http://localhost:8000。
在终端中,运行以下命令来停止应用程序。
$ docker compose down
总结
在本节中,你学习了如何使用 Docker 容器化并运行你的 Deno 应用程序。
相关信息
后续步骤
在下一节中,你将学习如何使用容器开发应用程序。