前提
- 筆者はMac環境(試してないがWindowsでも動くと思う)
- dockerコマンドが使える状態
- npmコマンドが使える状態
- nodeコマンドが使える状態
- Dockerの基本的知識(イメージやコンテナの概念)を有する
対象
- 環境構築を手っ取り早くしたい人
- Node.jsをdockerで動かしたい人
環境
bash
$ docker -v
Docker version 20.10.2, build 2291f61
$ npm -v
6.14.5
$ node -v
v13.11.0
$ pwd
~/{project_name}
ファイル構成
project
{project_name}
├─ node_modules
| └─ ...
├─ src
| └─ index.js
└─ docker-compose.yml
└─ Dockerfile
└─ package.json
└─ package-lock.json
node_modules
の中身は割愛
Dockerfileの設定
基本的にはこちらの公式ドキュメント通りにやれば良いが、楽に開発したいたので修正する
{project_name}/Dockerfile
FROM node:12
# アプリケーションディレクトリを作成する
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Dockerfileが置かれているディレクトリ以下をコピー
ADD . /usr/src/app
# アプリケーションの依存関係をインストールする
COPY package*.json /usr/src/app
RUN npm install
# 本番用にコードを作成している場合
# RUN npm install --only=production
# アプリケーションのソースをバンドルする
COPY . /usr/src/app
-
FROM node:12
:12
の部分はこちらを参考に自身の好きなバージョンで! -
WORKDIR /usr/src/app
:dockerコンテナの作業ディレクトリを指定
(変更する場合はDockerfileと後に紹介するdocker-compose.ymlに書かれた/usr/src/app
を全て変更する必要あり)
docker-compose.ymlの設定
{project_name}/docker-compose.yml
version: '3'
services:
app:
build: .
command: bash -c 'node src/index.js'
image: node_test
volumes: .:/usr/src/app
ports: "8080:8080"
tty: true
-
command: bash -c 'node src/index.js'
:docker-compose up
コマンドでコンテナ起動の際に呼ばれるコマンド -
image: node_test
:image名は任意で変更(分かりやすいプロジェクト名とか) -
volumes: .:/usr/src/app
:ローカルのファイルとdockerコンテナ内のファイルを同期させる -
ports: "8080:8080"
:ローカルとコンテナ両方とも8080番ポートを使用 -
tty: true
:docker-compose up
でコンテナが終了しないようにする
(index.jsの設定)
基本的に自身の環境による
以下はこちらの雛形
'use strict';
const express = require('express');
// Constants
const PORT = 8080;
const HOST = '0.0.0.0';
// App
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
起動
bash
$ docker-compose up
Have fun !!
※ イメージができてない場合、コンテナ起動までに時間がかかる