你需要了解的Deno镜像

636 阅读1分钟

发布在 Docker Hub上的Deno的Docker文件:

这几个镜像中,我们在生产时一般使用Alpine版本,因为它的体积最小。

本地运行

# 启动Deno REPL的命令如下:
$ docker run -it denoland/deno:1.36.4 repl

# 进入Docker运行时的命令如下:
$ docker run -it denoland/deno:1.36.4 sh

# 从工作目录运行main.ts的命令如下:
$ docker run -it -p 1993:1993 -v $PWD:/app denoland/deno:1.36.4 run --allow-net /app/main.ts

这里,-p 1993:1993将容器上的端口1993映射到主机上的1993,-v $PWD:/app将主机的工作目录挂载到容器上的/app,--allow-net /app/main.ts是传递给容器中的Deno的参数。

作为Dockerfile使用

FROM denoland/deno:1.36.4

# 应用程序监听的端口。
EXPOSE 1993

WORKDIR /app

# 最好不要以 root 用户身份运行。
USER deno

# 将依赖项缓存为一个层(只有在 deps.ts 修改时才会重新运行以下两个步骤)。
# 理想情况下,cache deps.ts 将下载并编译 main.ts 中使用的所有外部文件。
COPY deps.ts .
RUN deno cache deps.ts

# 这些步骤将在工作目录中的每个文件更改时重新运行:
COPY . .
# 编译主应用程序,以便不需要在每次启动/入口时进行编译。
RUN deno cache main.ts

CMD [ "run" , "--allow-net" , "main.ts" ]

然后构建后运行:

$ docker build -t app . && docker run -it -p 1993:1993 app

复制二进制文件

如果想要在镜像里只复制一个二进制文件,可以使用denoland/deno:bin这个镜像简化操作:

ARG DENO_VERSION=1.36.4

FROM denoland/deno:bin-$DENO_VERSION AS deno
FROM ubuntu
COPY --from=deno /deno /usr/local/bin/deno

本地免安装Deno,直接用Docker中的命令

在国内,由于Deno的安装包是在GitHub上,无论是直接安装还是使用deno upgrade更新,都可能是耗时的:

$ deno upgrade
Looking up latest version
Found latest version 1.36.4
Downloading https://github.com/denoland/deno/releases/download/v1.36.4/deno-x86_64-unknown-linux-gnu.zip
[09:43] [######################>------------------------] 19.22MiB/38.91MiB

这时有几种方案:

  1. 科学上网
  2. GitHub上直接下载对应的包,解压到某个目录下,再将之添加到环境变量。有可能还是会慢,你可以百度下GitHub的加速处理。

image.png

  1. 使用Docker。

正常来说,Docker也需要设置国内镜像,这里就不赘述了。 在.bashrc中添加:

deno () {
  docker run \
    --interactive \
    --tty \
    --rm \
    --volume $PWD:/app \
    --volume $HOME/.deno:/deno-dir \
    --workdir /app \
    denoland/deno:1.36.4 \
    "$@"
}

然后查看:

$ source ~/.bashrc
$ deno --version
$ deno run ./main.ts

默认情况下Deno info是这样的:

$ deno info
DENO_DIR location: /root/.cache/deno
Remote modules cache: /root/.cache/deno/deps
npm modules cache: /root/.cache/deno/npm
Emitted modules cache: /root/.cache/deno/gen
Language server registries cache: /root/.cache/deno/registries
Origin storage: /root/.cache/deno/location_data

所以,如果要与默认保持一致,则修改上面的挂载路径:

deno () {
  docker run \
    --interactive \
    --tty \
    --rm \
    --volume $PWD:/app \
    --volume $HOME/.cache/deno:/deno-dir \
    --workdir /app \
    denoland/deno:1.36.4 \
    "$@"
}

只是这样的缺点也很明显,一是启动速度肯定要稍差些,二是时区需要调整。


本文内容主要参考github.com/denoland/de…说明文档。