このノードアプリケーションについて
このアプリケーションには、パッケージ、json、server.js、および.gitignoreファイルが含まれています。
.gitignore
node_modules/*
package.json
{"name": "docker-dev"、 "version": "0.1.0"、 "description": "docker dev"、 "依存関係":{"connect-redis": "〜1.4.5"、 "express": "〜3.3.3"、 "hiredis": "〜0.1.15"、 "redis": "〜0.8.4"}}}server.js
var express = require( 'express')、app = express()、redis = require( 'redis')、redisstore = require( 'connect-redis')( 'connect-redis')( 'connect-redis')、server = require( 'http')。 Redisstore({host:process.env.redis_host || 'localhost'、port:process.env.redis_port || 6379、db:process.env.redis_db || 0})、cookie:{expires:fals、maxage:30 * 24 * 60 * 60 * 1000 * 1000 * 1000 res.json({status: "ok"});}); var port = process.env.http_port || 3000; server.listen(port); console.log( 'リスニングポート' +ポート);Server.jsはすべての依存関係をプルし、特定のアプリケーションを起動します。この特定のアプリケーションは、Redisにセッション情報を保存するように設定されており、JSONステータスメッセージに応答する要求エンドポイントを公開します。これはすべて非常に標準的なものです。
注意すべきことの1つは、Redisの接続情報を環境変数を使用して書き直すことができるということです。これは、開発環境開発から生産環境製品への後の移行に役割を果たすことです。
Dockerファイル
開発ニーズのために、同じコンテナでRedisとノードを実行します。これを行うには、DockerFileを使用してこのコンテナを構成します。
dockerfile
dockerfile / ubuntumaintainer abhinav ajgaonkar <[email protected]> http://nodejs.org/dist/v0.10.28/node-v0.10.10.28-linux-x64.tar.gz &&/tar -xzf node-v0.10.28-linux-x64.tar.gz &&/mv node- &&/cd28-linux-x64 node- /ln -s/opt/node/bin/*。 && /rm -f /opt/node-v0.10.28-linux-x64.tar.gz# working directoryworkdir /srccmd [" /bin /bash"]を設定します。
それを一つずつ理解しましょう、
dockerfile/ubuntuから
今回、Dockerは、Docker Inc.が提供するDockerFile/Ubuntuイメージを構築するベンチマーク画像として使用するように言われています。
走る /
apt -get -y -qqインストールpython redis -server
ベンチマーク画像には何も含まれていません。そのため、アプリケーションが実行する必要があるすべてを取得するには、APT -Getを使用する必要があります。この文は、PythonとRedis-Serverをインストールします。セッション情報をITに保存するため、Redisサーバーが必要です。Pythonの必要性は、NPMを通じてRedisノードモジュールが必要とするC拡張機能に組み込むことができることです。
run /cd /opt && /wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz && /tar -xzf node-v0.10.28-linux-x64.tar. && /mv nod-v0.10.10.10min && /mv node-v0.10.28-linux-x64 node && /cd /usr /local /bin && /ln -s /opt /node /bin /*。 && /rm -f /opt/node-v0.10.28-linux-x64.tar.gz
これにより、64ビットnodejsバイナリをダウンロードして抽出します。
WorkDir /SRC
この文は、CMTプロパティで指定されたものを実行する前に、コンテナが開始されたら、CD /SRCを1回実行する必要があることをDockerに伝えます。
cmd ["/bin/bash"]
最後のステップとして、run /bin /bash。
コンテナを構築および実行します
Dockerファイルが書かれているので、Docker画像を作成しましょう。
docker build -t sqldump/docker -dev:0.1。
画像が構築されたら、次のステートメントを使用してコンテナを実行できます。
docker run -i -t - rm / -p 3000:3000 / -v `pwd`: / src / sqldump / docker -dev:0.1
Docker Runコマンドで何が起こっているのかを見てみましょう。
-Iインタラクティブモードでコンテナを起動します(-Dと比較して別々のモードです)。これは、インタラクティブセッションが終了すると、コンテナが終了することを意味します。
-tはpseudo-ttyを割り当てます。
-RMは、終了するときにコンテナとそのファイルシステムを削除します。
-P 3000:3000は、ホストのポート3000をコンテナのポート3000に転送します。
-v `pwd`:/src
この文は、現在の作業ディレクトリをホスト(たとえば、プロジェクトファイル)コンテナに /SRCにマウントします。 DockerFileでADDコマンドを使用する代わりに、現在のディレクトリをボリュームとして掛けているため、テキストエディターで行う変更はすぐにコンテナで表示されます。
sqldump/docker-dev:0.1は、実行するDocker画像の名前とバージョンです。これは、Docker画像の作成に使用した名前とバージョンと同じです。
DockerfileはCMD ["/bin/bash"]を指定しているため、コンテナが起動するとすぐに、Bash Shell環境にログインします。 Docker Runコマンドが正常に実行された場合、次のようになります。
開発を開始します
コンテナが実行されているため、コードの作成を開始する前に、標準の非ドッカー関連のものを整理する必要があります。まず、次のステートメントを使用して、コンテナ内のRedisサーバーを起動する必要があります。
サービスRedis-Serverスタート
次に、プロジェクトの依存関係とNodemonをインストールします。 Nodemonはプロジェクトファイルの変更を観察し、時間内にサーバーを再起動します。
npm installnpm install -g nodemon
最後に、次のコマンドでサーバーを起動します。
nodemon server.js
さて、ブラウザでhttp:// localhost:3000に移動する場合、次のようなものが表示されます。
開発プロセスをシミュレートするために、server.jsなどの別のエンドポイントを追加しましょう。
app.get( '/hello/:name'、function(req、res){res.json({hello:req.params.name});});Nodemonが作成した変更を検出し、サーバーを再起動したことがわかります。
そして今、ブラウザをhttp:// localhost:3000/hello/worldにナビゲートすると、次の回答が表示されます。
生産環境
現在の状態の容器は、製品としてリリースされるにはほど遠いです。 Redisのデータは、コンテナを横切って再起動するときに永続的ではなくなります。たとえば、コンテナを再起動すると、すべてのセッションデータが一掃されます。コンテナを破壊して新しい容器を開けると同じことが起こります。これは明らかにあなたが望むものではありません。この問題については、2番目の部分の製品化されたコンテンツでお話します。