Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
使用 Docker 可以让我们的 Deno 应用更加方便地部署和管理,下面我们将详细介绍如何将 Deno 应用容器化。
准备工作
在开始之前,请确保已经安装了 Docker 和 Docker Compose。如果你还没有安装,可以参考 Docker 的官方文档进行安装。
检查 Docker 安装
打开终端并运行以下命令来检查 Docker 是否已正确安装:
docker --version
如果安装成功,你应该能看到类似 Docker version x.y.z, build abcdefg 的输出。
创建项目目录
首先,创建一个新的目录来存放你的 Deno 应用和相关的 Docker 文件:
mkdir deno-docker-app cd deno-docker-app
编写 Dockerfile
Dockerfile 是一个文本文件,其中包含了用于构建镜像的指令。接下来,我们将在项目根目录下创建一个名为 Dockerfile 的文件。
// www.javascriptcn.com code example # 使用官方 Deno 镜像作为基础镜像 FROM denoland/deno:latest # 设置工作目录 WORKDIR /app # 将当前目录的内容复制到容器的工作目录中 COPY . . # 暴露端口 EXPOSE 8000 # 运行 Deno 应用 CMD ["deno", "run", "--allow-net", "server.ts"]
这个 Dockerfile 的作用是:
- 使用最新的 Deno 镜像作为基础镜像。
- 设置工作目录为
/app。 - 将当前目录下的所有文件复制到容器中的
/app目录。 - 暴露端口 8000。
- 运行
server.ts文件作为 Deno 应用。
创建 Docker Compose 文件
Docker Compose 允许用户通过单个命令启动多个服务。我们将在项目根目录下创建一个名为 docker-compose.yml 的文件。
// www.javascriptcn.com code example
version: '3'
services:
app:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: deno
POSTGRES_PASSWORD: denopassword
POSTGRES_DB: denodb
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:这个 Docker Compose 文件定义了两个服务:app 和 db。
app服务使用当前目录的 Dockerfile 构建镜像,并将主机的 8000 端口映射到容器的 8000 端口。同时,它将当前目录挂载到容器的/app目录,并且依赖于db服务。db服务使用最新的 Postgres 镜像,并设置了环境变量来配置数据库用户、密码和数据库名称。此外,它还将数据存储在一个名为dbdata的卷中。
构建和运行 Docker 容器
现在我们已经准备好了 Dockerfile 和 docker-compose.yml 文件,接下来就可以构建和运行我们的容器了。
构建 Docker 镜像
在项目根目录下运行以下命令来构建 Docker 镜像:
docker-compose build
启动 Docker 容器
构建完成后,我们可以使用以下命令来启动容器:
docker-compose up
这将启动 app 和 db 服务,并将容器内的 8000 端口映射到主机的 8000 端口。此时,你的 Deno 应用应该已经在本地运行起来了。
访问应用
打开浏览器,访问 http://localhost:8000,你应该可以看到你的 Deno 应用正在运行。
结束语
通过本章的学习,我们了解了如何使用 Docker 来容器化我们的 Deno 应用。这种方式不仅简化了应用的部署过程,还提高了应用的可移植性和安全性。希望这些内容对你有所帮助!