node + nodemon の開発用コンテナを作成した。実行環境はwin10とdocker-machine
.
├── app.js
├── docker-compose.yml
├── Dockerfile
├── package-lock.json
├── package.json
└── node_modules
#DockerfileFROM node:12WORKDIR /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:nodeports:-'80:8081'restart:alwaysvolumes:# ホストの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:truestdin_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