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ポートで起動するように設定されていれば)
Visual Studio Codeでアプリケーションのデバッグ
Visual Studio Codeでアプリケーションを開発している場合は、launch.jsonに上記の記載内容を追加すればデバッグ出来るようになります。