0
7

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 3 years have passed since last update.

DockerコンテナをつかったNodeJS開発・実行環境

Last updated at Posted at 2021-04-30

DockerをつかったNodeJS開発・実行環境

NodeJSの開発をしているとき、実行環境を個別に作って残しておきたかったり、Nodeバージョンをコロコロ変えたかったりしたいので、Dockerコンテナを使ってNodeJSの開発・実行環境を作れるようにしました。
実行のたびにクリーンなコンテナを立てて、実行終わったらコンテナごと消すやり方もありますが、今回はコンテナ立てたまま動かすやり方です。

使い方としては、

  1. 開発始める前にコンテナ立てる
  2. 開発中はコンテナ立てっぱなしで、execすることでNodeJSを実行する
  3. コードの編集はホスト側(Windows/MacOS)でやる
  4. コンテナ作り直したかったらdocker-compose downで落として、docker-compose upする

という形を想定しています。

Docker Composeでコンテナ立てて動かす

軽量なAlpine上でNodeJSのv16系を動かしたイメージにします。
以下のdocker-compose.ymlを作成。

docker-compose.yml
version: '3'

services:
  app:
    image: node:16-alpine
    container_name: node-container
    tty: true
    volumes:
      - ./src:/src
    working_dir: "/src"

これをプロジェクトのルートフォルダにおいて、./src/以下にソースコードやpackage.jsonを置くようにします。
コンテナをたてて実行するときは、以下コマンド。

これで、コンテナが立ちっぱなしになります。

bash
docker-compose up -d

必要なライブラリをインストール(npm install)する

上のdocker-compose.ymlで、 app: というかたちで、名前がappのサービスを作ったので、そのサービスを指定することで、コマンドを実行できます。
npm install をしたいので、docker-compose execを使い、

bash
docker-compose exec app npm install

で、さっき立てたコンテナ上でnpm installすることができます。

execで立ってるコンテナ上でプログラムを実行

npm installと同じく、docker-compose execを利用します。

bash
docker-compose exec app node main.js

もしくは、package.jsonをしっかり書いているようであれば、

bash
docker-compose exec app npm start

で、プログラムを実行できます。

コード書いて開発していく

docker-compose.ymlのvolumesの欄で、./srcディレクトリをコンテナ内にマウントしてあるので、ホスト側(Windows/MacOS側)で編集した内容が、常にコンテナ内にも反映されるようになっています。
なので、Windows/MacOS上で./src/main.jsなどのソースコードをもりもり編集し、 docker-compose exec app npm start することで、もりもり開発していけます。

コンテナ立てなおす

試行錯誤するうちにコンテナの環境が汚れてくることもあるので、その時はコンテナ立てなおします。
それも簡単で、docker-compose.ymlがあるディレクトリで、

bash
docker-compose down
docker-compose up -d

を実行すると、今まで使ってたコンテナを捨てて、新しいコンテナを立てなおすことができます。

備考 都度都度コンテナを立てて実行する

NodeJSのpackage.jsonをこんな感じにします。。
ポイントはscript.clean-startのところ。
node_modulesディレクトリを消して、モジュールインストールして、Nodeを実行する流れです。

package.json
{
  "scripts": {
    "start": "node ./main.js",
    "clean-start": "rm -r ./node_modules && npm install && npm start"
  },
  "dependencies": {
  }
}

これで、以下のコマンドたたくと、コンテナ立てて、上記の処理を行い、終わったらコンテナを都度都度消してくれます。

bash
docker-compose run --rm app npm run-script clean-start

参考にしたリンク

https://qiita.com/nikadon/items/995c5705ff1171f7484d
https://docs.docker.jp/compose/compose-file.html

0
7
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
0
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?