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を実行する。


Related #js