Bunは、高速なJavaScript/TypeScriptランタイムとして注目を集めていますが、Dockerコンテナを利用することで、開発環境の再現性を向上させ、本番環境でも安定した動作を実現できます。
本記事では、Bun環境をDockerで構築する方法について、基本的な手順から実践的な活用方法まで詳しく解説します。
[目次を開く]
なぜBunをDockerで動かすのか?
BunをDocker環境で動かすことで、以下のメリットを得ることができます。
- 環境の一貫性 – 開発者間で同じ環境を再現可能
- 簡単なデプロイ – クラウド環境に簡単に展開できる
- 依存関係の管理 – 環境設定やライブラリのバージョンを固定
- 軽量で高速な開発サイクル – コンテナ起動が速く、TypeScriptのビルドも不要
Bun環境のDockerコンテナ化手順
以下の手順で、BunをDockerコンテナ内にセットアップし、実際に動作確認を行います。
1. 必要なもの
- Dockerのインストール(公式サイトからダウンロード)
- 任意のコードエディタ(VSCodeなど)
- 基本的なBunの知識
2. Dockerfileの作成
まず、プロジェクトディレクトリを作成し、Dockerfile
を準備します。
mkdir bun-docker-app && cd bun-docker-app
touch Dockerfile
Dockerfile
に以下の内容を記述します。
# Bun公式イメージを使用(軽量で最適化された環境)
FROM oven/bun:latest
# アプリケーションのワーキングディレクトリを設定
WORKDIR /app
# package.jsonと依存関係をコピー
COPY package.json ./
# 依存関係をインストール
RUN bun install
# アプリケーションのソースコードをコピー
COPY . .
# アプリを実行するコマンド
CMD ["bun", "run", "index.ts"]
3. 必要なファイルの準備
{
"name": "bun-docker-app",
"version": "1.0.0",
"main": "index.ts",
"scripts": {
"start": "bun run index.ts"
},
"dependencies": {
"express": "^4.18.2"
}
}
アプリケーションのソースコードや設定ファイルを準備します。
package.json
の作成
index.ts
の作成(Expressサーバーの例)
import express from "express";
const app = express();
const port = 3000;
app.get("/", (req, res) => {
res.send("Hello from Bun running in Docker!");
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
4. Dockerコンテナのビルドと実行
以下のコマンドでコンテナイメージをビルドします。
docker build -t bun-docker-app .
イメージのビルドが完了したら、コンテナを起動します。
docker run -p 3000:3000 bun-docker-app
成功すると、http://localhost:3000
にアクセスすると、"Hello from Bun running in Docker!" と以下の画像のように表示されると成功です。

Docker Composeを使ったBun環境の管理
プロジェクトが大規模になると、Docker Composeを使用して環境をより簡単に管理できます。
1. docker-compose.yml
の作成
version: '3'
services:
app:
image: oven/bun:latest
working_dir: /app
volumes:
- .:/app
ports:
- "3000:3000"
command: bun run index.ts
2. コンテナの起動
以下のコマンドでアプリケーションを起動します。
docker-compose up -d
ブラウザで http://localhost:3000
にアクセスし、動作確認を行います。
Bun環境のDocker運用のポイント
1. ホットリロードの設定
開発時には、ファイル変更時に自動で再起動できるようにするために、bun --watch
を利用します。
DockerfileのCMD部分を以下のように変更します。
CMD ["bun", "run", "--watch", "index.ts"]
また、Docker Composeでは次のように変更します。
command: ["bun", "run", "--watch", "index.ts"]
2. マルチステージビルドの活用
本番環境向けに、マルチステージビルドを活用し、不要なファイルを削除して軽量化を行います。
# 開発環境
FROM oven/bun:latest AS builder
WORKDIR /app
COPY . .
RUN bun install
# 本番環境用の軽量コンテナ
FROM oven/bun:latest
WORKDIR /app
COPY --from=builder /app .
CMD ["bun", "run", "index.ts"]
参考記事
3. 環境変数の管理
環境変数を .env
ファイルで管理し、セキュアな環境を実現します。
.env
の例:
PORT=3000
NODE_ENV=production
docker-compose.yml
の設定:
env_file:
- .env
まとめ
BunをDockerでコンテナ化することで、開発環境の統一、デプロイの簡素化、スケーラビリティの向上が可能になります。特に、軽量なBunとDockerの組み合わせは、スタートアップやスピード重視のプロジェクトに最適です。
ぜひ、この記事を参考にBun環境をDockerで試してみてください!