at backyard

Color my life with the chaos of trouble.

Docker上でDenoを動かしてdinatra を使った Webアプリ(最小構成)を起動させる

不意にDenoを動かしてみたくなったので、Docker上でまずは起動させてみようと思う。

DenoをDockerで動かすことに関してはリポジトリ内にもissueが上がっていたので、まずはそちらを読んでみた。

github.com

上のissueに書かれていたもので、deno-dockerというリポジトリがあるので、こちらを使ってDocker上でdenoを動かしてみる。

github.com

Docker上でdenoを動かす

以下、備忘録。

ひとまずはDocker hubで用意されているdocker imageをpullして起動させてみる。

https://hub.docker.com/r/maxmcd/deno

# Docker hubで用意されている最新のimage(tag:latest)をpull
docker pull maxmcd/deno

# docker起動してbash
docker run -it --rm --name deno-test maxmcd/deno /bin/bash

これでdockerが立ち上がるので、試しに下記のコマンドでdenoを動かせることを確認。

deno --version
# => deno 0.25.0

# deno起動して "hello deno"起動させてみる
deno
> console.log('hello deno')
hello deno
undefined

Docker上でdinatraを使って最小構成のWebアプリを動かしてみる

せっかくなので超簡単で良いのでwebアプリを立ち上げてみたいところ。

こちらの方の記事を参考にさせていただいた。
(なお、今回webアプリを動かす上で使用する dinatra の作者の方でもあるよう)

qiita.com

host側のPCにソースコードは用意する。
以下、ホスト側の作業ディレクトリにてファイルを作成。

mkdir work
vim work/index.ts

dinatra は下記の2行だけでwebアプリを起動させられるよう。
ここらへんの細かな解説は上の記事に分かりやすく書かれているので、興味ある方はぜひ読んでみることをおすすめします!

import { app, get } from 'https://denopkg.com/syumai/dinatra/mod.ts';

app(get('/hello', () => 'hello'));

再びDockerを立ち上げるが、
今回はポート8080にアクセスできるようにしていることと、workディレクトリ配下をDocker側の/tmp/shareにマウントさせるようにしている。

docker run -it --rm -v $(pwd)/work:/tmp/share -p 8080:8080 --name deno-test maxmcd/deno /bin/bash 

Dockerに接続したら、下記のコマンドでwebアプリを立ち上げる。

mkdir work
cp /tmp/share/index.ts work/

# Denoはファイルアクセスや、ネットワークへのアクセスに権限の許可を必要とするので、 --allow-net をつけて実行
deno --allow-net work/index.ts

# 下記のようなログが流れてくる(途中省略)
Compile file:///work/index.ts
Download https://denopkg.com/syumai/dinatra/mod.ts
Download https://raw.githubusercontent.com/syumai/dinatra/master/mod.ts
Download https://raw.githubusercontent.com/syumai/dinatra/master/vendor/https/deno.land/std/http/server.ts
Download https://raw.githubusercontent.com/syumai/dinatra/master/response.ts
・
・
・

これでホスト側のブラウザから下記のURLでアクセスすると、helloという文字が表示されるのが確認できる。

http://localhost:8080/hello

今回触ってみたdinatra 、シンプルでわかりやすい感じなので、もうちょい色々と触ってみたいところ!

github.com