LoginSignup
3
2

More than 3 years have passed since last update.

node+nodemonのdockerコンテナ

Posted at

node + nodemon の開発用コンテナを作成した。実行環境はwin10とdocker-machine

.
├── app.js
├── docker-compose.yml
├── Dockerfile
├── package-lock.json
├── package.json
└── node_modules
#Dockerfile

FROM node:12

WORKDIR /app

# ホストのpackage.jsonとpackage-lock.jsonを
# コンテナの/appにコピー
COPY ./package*.json ./

CMD bash -c "npm install && npm run dev"
docker-compose.yml
version: '3.3'

volumes:
  node_modules:

services:
  app:
    build: .
    container_name: node
    ports:
      - '80:8081'
    restart: always
    volumes:
      # ホストのdocker-compose.ymlがあるディレクトリを
      # コンテナの/appマウントする
      - '.:/app'
      # ただしnode_modulesだけ除外するためnode-mudulesボリュームを
      # コンテナの/app/node_modulesにマウントする
      # コンテナ内でnpm install してもホストのnode_modulesは空のまま
      - 'node_modules:/app/node_modules'
    # 下2行はdocker run コマンドの-itオプションに相当する
    # 無いとコンテナが停止してしまう
    tty: true
    stdin_open: true
package.json
{
  "name": "hoge",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node ./app.js",
    "dev": "nodemon -L ./app.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.4"
  },
  "author": "",
  "license": "ISC"
}

以下のようにしてDockerfileでnpm startするとnodemonは機能しなかった。startキーではダメ。さらに-Lオプションが必要。

 "scripts": {
    "start": "nodemon ./app.js"
  }

起動コマンドなど

コンテナ起動

docker-compose up -d

node_modulesボリュームは自動で作成される。project_node_modulesという名前になる。docker-machineのIPアドレスでブラウザからnodeサーバーにアクセスできる

nodemonが機能してることを確認する

docker-compose logs -f

または

docker logs node -f

コンテナ削除

docker-compose down --rmi all

--rmi all でイメージも削除される

node_modulesボリュームを削除

docker volue rm project_node_modules

ボリューム名を確認

docker volume ls

docker-machineのIPを調べる

docker-machine ls

または

docker-machine ip
docker-machine ip default
3
2
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
3
2