🌐
docker-compose & node.js 開発環境構築
対象者
- docker-compose を使って node.js の開発環境を作りたい方.
- 開発環境を docker のコンテナを用いて運用したい方.
ディレクトリ構成
nodejs-sampleディレクトリの中身はこんな感じです.
/nodejs-sample
.
├── .dockerignore
├── docker-compose.yaml
├── package.json
└── src
└── server.js
各ファイル
.dockerignore
node_modules
npm-debug.log
docker-compose.yaml
version: "3.7"
services:
app:
image: node:16.14.0
working_dir: /usr/src/app
tty: true
ports:
- '3000:3000'
volumes:
- ./:/usr/src/app
command: >
bash -c "npm install &&
npm install nodemon -g &&
nodemon src/server.js"
package.json
{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "First Last <first.last@example.com>",
"main": "server.js",
"scripts": {
"start": "nodemon src/server.js"
},
"dependencies": {
"express": "^4.16.1"
}
}
server.js
'use strict';
const express = require('express');
// Constants
const PORT = 3000;
const HOST = '0.0.0.0';
// App
const app = express();
app.get('/', (req, res) => {
res.send('Hello World succeeded request');
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
実行
ログが見れるのでこちらの方が分かりやすい.
terminal1
$ docker-compose up
[+] Running 2/2
⠿ Network nodejs-sample_default Created 0.7s
⠿ Container nodejs-sample-app-1 Created 1.3s
Attaching to nodejs-sample-app-1
nodejs-sample-app-1 | added 62 packages, and audited 63 packages in 1s
nodejs-sample-app-1 |
nodejs-sample-app-1 | 2 packages are looking for funding
nodejs-sample-app-1 | run `npm fund` for details
nodejs-sample-app-1 |
nodejs-sample-app-1 | found 0 vulnerabilities
nodejs-sample-app-1 | npm notice
nodejs-sample-app-1 | npm notice New minor version of npm available! 8.3.1 -> 8.5.4
nodejs-sample-app-1 | npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.5.4
nodejs-sample-app-1 | npm notice Run npm install -g npm@8.5.4 to update!
nodejs-sample-app-1 | npm notice
nodejs-sample-app-1 | added 116 packages, and audited 117 packages in 4s
nodejs-sample-app-1 |
nodejs-sample-app-1 | 16 packages are looking for funding
nodejs-sample-app-1 | run `npm fund` for details
nodejs-sample-app-1 |
nodejs-sample-app-1 | found 0 vulnerabilities
nodejs-sample-app-1 | [nodemon] 2.0.15
nodejs-sample-app-1 | [nodemon] to restart at any time, enter `rs`
nodejs-sample-app-1 | [nodemon] watching path(s): *.*
nodejs-sample-app-1 | [nodemon] watching extensions: js,mjs,json
nodejs-sample-app-1 | [nodemon] starting `node src/server.js`
nodejs-sample-app-1 | Running on http://0.0.0.0:3000
terminal2
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ebf3eac5d27d node:16.14.0 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3000->3000/tcp nodejs-sample-app-1
$ docker exec --it nodejs-sample-app-1 bash
root@ebf3eac5d27d:/usr/src/app# ls
docker-compose.yaml node_modules package-lock.json package.json src
root@ebf3eac5d27d:/usr/src/app# npm install mysql
デーモンで実行する場合は下
$ docker-compose up -d
後片付け
$ docker-compose down
補足説明
docker-compose.yaml について
docker-compose.yamlファイルのcommandの部分説明します.
docker-compose.yaml - command
command: >
bash -c "npm install &&
npm install nodemon -g &&
nodemon src/server.js"
npm install で package.json や package-lock.json の中身をコンテナ内にinstall
npm install nodemon -g でコンテナ内で nodemon が使えるようになります.
nodemon src/server.js で実行.
nodemon をなぜ使うか.
nodemonを使わなければ nodemon src/server.js は node src/server.js になります.
しかし,server.js の中身を書き換えたり,新しいmoduleをnpm install した場合は再度, node src/server.js する必要があります.開発環境でそれは怠いのでnodemonを使用します.こいつは便利で,ファイルの中身を書き換えたり,モジュールを追加したときは自動で再起動してくれます.開発環境では使うべきでしょう.他に何か同様なものを知っているならば使わなくて結構です.
terminal2 について
docker-compose で立てたコンテナ内に入る処理の例として受け取ってください.
npm install module_name とかは,コンテナの中で行います.
Discussion