Dockerfile作成&Nodeアプリケーションデプロイ
Nodeアプリケーションをdockerで運用したかったのでDockerfile作成してコンテナを作成し、デプロイした。
初心者だったのでdockerfileの書き方を調べて一から作成した。dockerfileの命令等を説明していきたい。
はじめに
Dockerをマシンにインストールしていることを前提とする。
git clone https://github.com/hikaru7719/chat_app.git
でnodeアプリケーションとDockerfileが持って来れます。
よろしければ是非。以下コマンドはclone先で実行してください。
githubのURLはこれ→githubURL
DockerFileとは
dockerfileはdockerコンテナを作成するためのいわば設計書である。
近年,devopsという考え方が広まってきているが、開発環境や運用環境の構築方法をコード化し管理できることは開発者にとってメリットが大きい。
dockerfileはいくつかの命令から構成されており、dockerデーモンはこれらの命令を逐次実行していき、dockerイメージを作成する。
シェルスクリプトに似ている気がする。
FROM node:latest
MAINTAINER Hikaru Miyahara
ENV NODEPATH /node
ENV APP ${NODEPATH}/app
RUN mkdir -p ${APP}
COPY . ${APP}
WORKDIR ${APP}
RUN npm install
CMD npm start
これが今回作成したdockerfile。
以下命令について説明したい。
命令説明
FROM
FROM <イメージ名:タグ>
FROM命令はコンテナの基になるイメージを指定する。今回はnode最新バージョンのイメージnode:latestを引数に持つ。
MAINTAINER
これは作成者をかく欄。
ENV
ENV <変数名> <値>
これはdockerコンテナに渡す変数である。
また${変数名}で値を参照できる。シェルスクリプトとここら辺は一緒。
RUN
RUN <コマンド>
コマンドを実行する。
COPY
COPY <マシンパス> <dockerパス>
サーバ上のディレクトリやファイルをdockerコンテナにコピーするコマンド。
一つ目のマシンパスでコピーしたいディレクトリを指定し、dockerコンテナのコピー先をdockerパスの部分で指定する。
WORKDIR
dockerコンテナの実行ディレクトリ。
docker exec 等でコンテナ内に入るとここのworkdirに飛ぶ。
CMD
CMD <コマンド>
コマンドの実行。Dockerfileの最後の行に書く。
docker run実行後にコンテナ内のWORKDIRでこのコマンドを実行する。
dockerファイル説明
今回はFROM命令によってnode:latest
のイメージを基にしている。これをカスタマイズしていく。
RUN mkdir -p ${APP}
でdockerコンテナ上の/node/app
ディレクトリを作成。
COPY . ${APP}
で現在いるディレクトリをコンテナ上の/node/app
にコピー。
WORKDIR ${APP}
でワーキングディレクトリを/node/app
をしてい。
RUN npm install
でコピーしたpackage.jsonに基づいてnodeパッケージをインストール。
CMD npm start
でコンテナ作成後にアプリケーションの立ち上げ。
実行してみる
nodeアプリケーションのあるディレクトリで
docker build -t chat_app .
を実行。
タグ名をchat_appとしてdockerイメージを作成。
docker run -d -p 18080:3000
--name chat_app chat_app
-dオプションはdockerコンテナをバックグランドで実行する。-pはポート指定のオプション。ホストマシンの18080ポートでdockerコンテナの3000ポートに繋がる。
--nameでコンテナ名をchat_appとしている。
ブラウザで確認
localhostu:18080にアクセスするとしっかりアプリケーションが立ち上がっていた。
/でユーザー登録して/loginでログインしてメニューバーのchatからリアルタイムチャットできます。
終わりに
次回はdocker-composeしたい。