Bun アプリケーションのコンテナー化

前提条件

  • git クライアント が利用可能であること。 本節の利用例ではコマンドラインベースの git クライアントを用いていきますが、別のクライアントを用いてもかまいません。

概要

サーバーサイドの JavaScript アプリケーションとしては、長らく Node.js がデファクトスタンダードのランタイムとなっていました。 しかし最近では Bun ウェブサイト のように、エコシステムでの新しいランタイムが代わりに登場してきています。 Node.js と同じく Bun も JavaScript のランタイムですが、比較的軽量であり、高速化と効率化を目指して設計されています。

Docker を使って Bun アプリケーションを開発するのはなぜでしょう? 複数のランタイムが選択肢としてあるのは好ましいことです。 しかしランタイム数が増えるたびに、複数の異なるランタイムとその依存パッケージを常時管理し続けなければならなくなります。 これだからこそ Docker の登場となります。 必要に応じてコンテナーの生成と削除が行えるのは、たくさんのランタイムとその依存パッケージを管理する方法として適しています。 さらに Bun は新しいランタイムであるため、Bun による一貫した開発環境を整えることは実にやりがいがあります。 Docker はそのような一貫した Bun 開発環境を構築する助けとなります。

サンプルアプリケーションの入手

本ガイドにおいて利用するサンプルアプリケーションをクローンします。 端末画面を開いて、作業を行うディレクトリに移動します。 そして以下のコマンドを実行してリポジトリをクローンします。

$ git clone https://github.com/Pradumnasaraf/bun-docker.git

上により bun-docker ディレクトリ内は以下の内容となるはずです。

├── bun-docker/
│ ├── compose.yml
│ ├── Dockerfile
│ ├── LICENSE
│ ├── server.js
│ └── README.md

Dockerfile では FROM 命令において、ベースイメージとして oven/bun を指定しています。 これは Bun の開発元である企業 Oven によって生成されている Bun の公式イメージです。 このイメージは Docker Hub から入手 が可能です。

# ベースイメージとして Bun イメージを利用
FROM oven/bun:latest

# コンテナー内でのワーキングディレクトリの設定
WORKDIR /app

# カレントディレクトリ内のコンテンツをコンテナー内の /app にコピー
COPY . .

# API が利用するポートを開放
EXPOSE 3000

# コンテナー起動時にサーバーを実行
CMD ["bun", "server.js"]

ベースイメージとして oven/bun を指定している他にも Dockerfile では以下の内容が示されています。

  • コンテナー内のワーキングディレクトリを /app に設定しています。
  • カレントディレクトリ内の内容を、コンテナー内の /app ディレクトリにコピーします。
  • ポート 3000 番を開放します。API がこのポートからリクエストを受け付けます。
  • コマンド bun server.js の実行によってコンテナー起動が行われた際に、サーバーを実行します。

アプリケーションの実行

端末画面内の bun-docker ディレクトリから以下のコマンドを実行します。

$ docker compose up --build

ブラウザーを開いて http://localhost:3000 にアクセスしてアプリケーションを確認します。 ブラウザー上には {"Status" : "OK"} というメッセージが表示されるはずです。

端末画面から ctrl+c を押下してアプリケーションを停止します。

バックグラウンドでのアプリケーション実行

アプリケーションは端末から切り離して実行することができます。 それには -d オプションをつけます。 端末画面内の bun-docker ディレクトリから以下のコマンドを実行します。

$ docker compose up --build -d

ブラウザーを開いて http://localhost:3000 にアクセスしてアプリケーションを確認します。

端末画面から以下のコマンドを実行してアプリケーションを停止します。

$ docker compose down

まとめ

本節では Docker を使って Bun アプリケーションをコンテナー化して実行する方法について学びました。

関連情報

次のステップ

次の節では、コンテナーを使ってアプリケーションの開発を行う方法を学びます。