前提
- 筆者は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/appRUN 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';constexpress=require('express');// ConstantsconstPORT=8080;constHOST='0.0.0.0';// Appconstapp=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 !!
※ イメージができてない場合、コンテナ起動までに時間がかかる