node.js express foreverアプリをdockerコンテナ化する

将棋クエスト履歴検索βのキャッシュ機能部分をdockerコンテナ化する検討メモ

# 準備
# アプリは圧縮しておく(ADDコマンドでコンテナ内に展開する)
# start_forever.sh内のパスはコンテナ内のディレクトリで書いておく
tar -zcvf ./questSearch.tar.gz ./questSearch

# Dockerfile
# node.js
FROM node

ENV WORKDIR=/root
WORKDIR ${WORKDIR}

# ADD
ADD ./questSearch.tar.gz ./

WORKDIR ${WORKDIR}/questSearch
RUN chmod +x ./*.sh

# install foever
RUN npm install -g forever

CMD /root/questSearch/start_forever.sh

# start_forever.sh
# CMDに指定するスクリプト
# 終了するとコンテンが終了してしまうので
# 最後にtail -f のような終わらないコマンドを指定するのがポイント
# ここではforeverのログ表示コマンドを指定している
# tail -f やforeverでログを垂れ流すと、
# docker-compose upで標準出力に表示されるので
#コンテナのログとして妥当である

#! /bin/bash

echo "start_forever.sh"

# アプリディレクトリ ( /etc/rc.local 向け )
APP_DIR=/root/questSearch

# アプリ名
APP_NAME=questSearch

# ログファイルディレクトリ
# foreverに監視されないディレクトリを指定すること
LOG_DIR=/root/logs
mkdir ${LOG_DIR} -p

# コマンド
COMMAND=bin/www

# 現在ディレクトリ
ORG_DIR=`pwd`

# 移動
cd ${APP_DIR}

# 開始
forever start -a -w -l ${LOG_DIR}/${APP_NAME}_forever.log -o ${LOG_DIR}/${APP_NAME}_stdout.log -e ${LOG_DIR}/${APP_NAME}_stderr.log ${COMMAND}

# リスト
forever list

# ログ
# 注)これを起動スクリプトでやると無限ループになる
#tail -f ${LOG_DIR}/stdout.log

# 念のために
cd ${ORG_DIR}

# ログを表示し続ける
forever --fifo logs 0

# ビルド
sudo docker build -t test_image_nodejs .

# 起動
# /bin/bashのようなコマンドは指定しない
docker run -d --name test_nodejs -h test test_image_nodejs

# コンテナに入る
# CMDに/bin/bashを指定しているコンテナではないので
# attachだと固まるので注意。execで/bin/bashで入る。
sudo docker exec -it test_nodejs /bin/bash

# docker-composeへの対応
# インストール
# https://github.com/docker/compose/releases はいまいち動かなかったので
# http://c-loft.com/blog/?p=2385 の方法で入れた
curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose

# バージョン
loftkun@tk2-227-23463:~/dev/docker/node$ docker-compose -v
docker-compose version: 1.4.2
loftkun@tk2-227-23463:~/dev/docker/node$

# docker-compose.yml

nodeapp:
build: "./node"
container_name: "nodeapp"
working_dir: "/root"
ports:
- "30000:3000"

# 起動
sudo docker-compose up

この記事が気に入ったらサポートをしてみませんか?