40
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

概要

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 ライフを!

40
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?