Docker で Node.js 開発環境を簡単に用意する


概要

Docker を使って、ローカルを汚すことなく Node.js の開発環境を作る方法です。数行の docker-compose.yml を書いて、あとは随時コンテナを起動してコマンドを実行するだけです。


環境


  • macOS Mojave v10.14.2

  • Docker Desktop Community v2.0.0.2


手順


  1. Docker Desktop をインストールします。

  2. 開発用ディレクトリ(Git リポジトリ等)を用意します。


  3. docker-compose.yml を書きます。

手順 1、2 については特に説明は不要だと思うので省略します。


docker-compose.yml を書く

以下を書きます。


docker-compose.yml

version: '3'

services:
app:
image: node:11.8.0
ports:
- $PORT:$PORT
volumes:
- ./:/src
working_dir: /src


.env

PORT=8080




  • app — サービス名。好きな名前を付けます。

  • image — Docker の公式イメージを使います。バージョンは開発する目的に合わせて指定してください。

  • ports — Express を使って Web サーバを立てる場合など、ホスト・ゲスト間で通信が必要な場合はポートを指定します。今回は環境変数で指定できるようにしました。

  • volumes — ホスト側のディレクトリをゲストにマウントします。

  • working_dir — コンテナ起動後のカレントディレクトリを指定します。npm install を実行する package.json があるディレクトリを指定するとよいでしょう。

以上で準備完了です!


必要な場合はビルドを

パッケージマネージャに Yarn を使用するなど、Node.js のイメージに何かをインストールする必要がある場合は、Dockerfile を書いてビルドしておきます。


実行

あとは docker-compose run --rm <サービス名> <コマンド> で Node.js を使った何かを随時実行するだけです(以下、サービス名を app とします)。--rm オプションは、コマンド終了後にコンテナを自動的に削除してくれます。


npm で任意のライブラリをインストールする

docker-compose run --rm app npm install <パッケージ名>


package.json の依存ライブラリをインストールする

開発環境を他の人に提供するときなど。

docker-compose run --rm app npm install


package.json で定義したスクリプトを実行する

Express で Web サーバを起動するなど、package.json で定義したスクリプトを実行する場合。


package.json

{

"scripts": {
"start": "node --experimental-modules index.mjs"
}
}

docker-compose.yml の ports で指定したポートを通すには --service-ports オプションを付けます。

docker-compose run --rm --service-ports app npm start


よく使うコマンドはシェルスクリプトで

毎回 docker-compose run --rm app ... と打つのは面倒なので、よく使うコマンドはシェルスクリプトにしておくとよいです。

例えば、開発環境を構築するためのコマンドを一つのシェルスクリプトに書いておくことで、他の人が開発環境を簡単に準備できるようになります。


prepare.sh

#!/bin/bash

echo 'PORT=8080' >> .env && \
docker-compose run --rm app npm install



まとめ



  • docker-compose.yml で Node.js のイメージとボリューム、ワーキングディレクトリ等を定義します。


  • docker-compose run --rm <サービス名> <コマンド> で随時コンテナ作成、コマンド実行、コンテナ削除を行います。

それでは、快適な Docker ライフを!