TORIPIYO DIARY

recent events, IoT, programming, security topics

dockerでnodejs, mongodbのローカル開発環境を構築してVisual Studio Codeでデバッグする

nodejsのアプリをローカル環境で開発していて、mongodbはdockerコンテナ上で動かしていたのですが、nodejsアプリはローカルで動かしていました。今回、nodejsアプリもコンテナ上で動かすように変更したので共有します。

ディレクトリ構成は以下のように変わりました。

application
├── Dockerfile
├── Procfile # heroku localの設定
├── README.md
├── app # アプリケーションのソースコード
│   ├── app.js
│   ├── config
│   ├── models
│   ├── modules
│   ├── public
│   ├── routes
│   └── views
├── docker-compose.yml
├── logs # アプリケーションのログ
├── node_modules
├── package-lock.json
├── package.json
└── script # バッチ処理スクリプト

Dockerfile, .dockerignore, docker-compose.yml, Procfileをそれぞれ解説します。

Dockerfile

  • RUN curl https://cli-assets.heroku.com/install-ubuntu.sh | sh でherokuコマンドをインストール。
  • COPY package*.json ./ で、アプリケーションで利用するnpmパッケージの情報を取得。RUN npm installで、npmパッケージをインストール。
  • COPY . . で、アプリケーションのディレクトリ・ファイルをコンテナへコピー。コピーしたくないものは、.dockerignoreに記述。

.dockerignore

  • appディレクトリ以下のソースコードは、ローカルマシンのものをマウントさせる。
  • logファイルは不要。
  • node_modulesディレクトリ以下のファイルをコピーすると、コンテナ上にインストールされたnpmパッケージが上書きされてしまうのでコピー不要。

docker-compose.yml

  • appディレクトリ以下のソースコードをローカルマシンで編集できるように、- ./app:/usr/src/appを指定します。
  • nodejsアプリケーションをでバッグできるように、ローカルマシンの5858ポートとコンテナの5858ポートを繋ぎます。
  • mongodbのデータはdocker volume上に保存されるように、dbボリュームを作成して、dbボリュームをコンテナの/data/db配下にマウントします。

Procfile

  • heroku local development で実行する内容を、Procfileファイルに記述します。


Dockerfile, .dockerignore, docker-compose.yml, Procfileを用意して、docker-compose upを実行すれば、アプリケーションがdockerコンテナ上で起動します。起動後は、localhost:5000でアプリケーションに繋げるようになります。(アプリケーションが5000ポートで起動するように設定されていれば)

gist.github.com

Visual Studio Codeでアプリケーションのデバッグ

Visual Studio Codeでアプリケーションを開発している場合は、launch.jsonに上記の記載内容を追加すればデバッグ出来るようになります。

f:id:ha107chan:20180916143626p:plain