概要
Docker を使って、ローカルを汚すことなく Node.js の開発環境を作る方法です。数行の docker-compose.yml
を書いて、あとは随時コンテナを起動してコマンドを実行するだけです。
環境
- macOS Mojave v10.14.2
- Docker Desktop Community v2.0.0.2
手順
- Docker Desktop をインストールします。
- 開発用ディレクトリ(Git リポジトリ等)を用意します。
-
docker-compose.yml
を書きます。
手順 1、2 については特に説明は不要だと思うので省略します。
docker-compose.yml
を書く
以下を書きます。
version: '3'
services:
app:
image: node:11.8.0
ports:
- $PORT:$PORT
volumes:
- ./:/src
working_dir: /src
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
で定義したスクリプトを実行する場合。
{
"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 ...
と打つのは面倒なので、よく使うコマンドはシェルスクリプトにしておくとよいです。
例えば、開発環境を構築するためのコマンドを一つのシェルスクリプトに書いておくことで、他の人が開発環境を簡単に準備できるようになります。
#!/bin/bash
echo 'PORT=8080' >> .env && \
docker-compose run --rm app npm install
まとめ
-
docker-compose.yml
で Node.js のイメージとボリューム、ワーキングディレクトリ等を定義します。 -
docker-compose run --rm <サービス名> <コマンド>
で随時コンテナ作成、コマンド実行、コンテナ削除を行います。
それでは、快適な Docker ライフを!