Dockerでnodejsサーバを立てる
Expressのnodeサーバを立てる際にDockerを使って構築することにした。
package.jsonは以下で、
// package.json
{
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
expressサーバが以下の時、
// index.js
const express = require('express')
const app = express()
const port = process.env.PORT || 5000
app.get('/', async (req, res) => {
res.send('ok')
})
app.listen(port, () => console.log(`app listening on port ${port}!`));
docker-compose.ymlに以下を記述。
# docker-compose.yml
version: '3.3'
services:
datastore:
image: busybox
volumes:
- node_modules:/usr/local/lib/node_modules
app:
image: node:10
ports:
- "5000:5000"
volumes:
- node_modules:/usr/local/lib/node_modules
- .:/app
environment:
PORT: 5000
working_dir: /app
command: yarn start
volumes:
node_modules:
node_modulesはdatastoreで管理しているので、ライブラリインスタンスのためにrunでyarnを実行する。
docker-compose run --rm app yarn
あとは通常通りupで立ち上げればnodejsサーバが立ち上がる。
docker-compose up
http://localhost:5000 でサーバにアクセスできる。
ライブラリを追加した際には都度run yarnを実行する。