Docker
単純なNode.jsアプリケーションの実行
サーチ…
コンテナ内のBasic Node.jsアプリケーションの実行
ここで説明する例では、システムで動作するDockerのインストールと、Node.jsの操作方法の基本的な理解があることを前提としています。 Dockerの使い方を知っているなら、Node.jsフレームワークをシステムにインストールする必要はなく、Dockerから入手可能なnode
イメージのlatest
バージョンを使用することが明らかです。したがって、必要に応じて、コマンドdocker pull node
事前にイメージをダウンロードすることができdocker pull node
。 (コマンドはドッカーからnode
イメージの最新バージョンを自動的にpulls
します)。
すべての作業アプリケーションファイルが存在するディレクトリを作成します。アプリケーションと依存関係を記述する
package.json
ファイルをこのディレクトリに作成します。あなたのpackage.json
ファイルは次のようになります:{ "name": "docker_web_app", "version": "1.0.0", "description": "Node.js on Docker", "author": "First Last <[email protected]>", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.13.3" } }
Node.jsで作業する必要がある場合は、通常、Webアプリケーションを定義する
server
ファイルを作成しserver
。この場合、Express.js
フレームワーク(バージョン4.13.3
以降)を使用します。基本的なserver.js
ファイルは次のようになります。var express = require('express'); var PORT = 8080; var app = express(); app.get('/', function (req, res) { res.send('Hello world\n'); }); app.listen(PORT); console.log('Running on http://localhost:' + PORT);
Dockerに精通している方は、
Dockerfile
を参照してDockerfile
。Dockerfile
は、アプリケーションに合わせてカスタマイズされたカスタムイメージを作成するために必要なすべてのコマンドを含むテキストファイルです。
現在のディレクトリにDockerfile
という名前の空のテキストファイルを作成します。 Windowsを作成する方法は簡単です。 Linuxでは、アプリケーションに必要なすべてのファイルが格納されているディレクトリでtouch Dockerfile
を実行することができます。任意のテキストエディタでDockerfileを開き、次の行を追加します。
FROM node:latest
RUN mkdir -p /usr/src/my_first_app
WORKDIR /usr/src/my_first_app
COPY package.json /usr/src/my_first_app/
RUN npm install
COPY . /usr/src/my_first_app
EXPOSE 8080
FROM node:latest
は、Dockerデーモンに構築するイメージを指示します。この場合は、 Docker Hubから入手可能な公式のDockerイメージnode
latest
バージョンを使用します。このイメージの中で、必要なすべてのファイルを含む作業ディレクトリを作成し、このディレクトリをアプリケーションの作業ディレクトリとして設定するようにデーモンに指示します。このために、
RUN mkdir -p /usr/src/my_first_app WORKDIR /usr/src/my_first_app
次に、イメージの
/usr/src/my_first_app
作業ディレクトリに、依存関係を含むapp情報を指定するpackage.json
ファイルを移動して、アプリケーションの依存関係をインストールします。我々はこれを行うCOPY package.json /usr/src/my_first_app/ RUN npm install
次に
COPY . /usr/src/my_first_app
をタイプしCOPY . /usr/src/my_first_app
をCOPY . /usr/src/my_first_app
して、すべてのアプリケーションファイルとソースコードをイメージの作業ディレクトリに追加します。次に、
EXPOSE
ディレクティブを使用して、アプリケーションがポート8080
バインドしているため、結果のコンテナのポート8080
を(コンテナ間のマッピングを介して)表示するようにデーモンに指示します。最後のステップでは、デーモンに対して、基本的な
npm start
コマンドを実行して、イメージ内でコマンドnode server.js
を実行するよう指示します。コマンドに引数を取るCMD
ディレクティブを使用します。CMD [ "npm", "start" ]
私たちは、その後、作成
.dockerignore
と同じディレクトリにファイルをDockerfile
私たちのコピーを防止するためにnode_modules
ドッカーの画像へコピーされることから、当社のNode.jsシステムのインストールで使用してログを。.dockerignore
ファイルの内容は次のとおりです。node_modules npm-debug.log
あなたのイメージを構築する
Docker Dockerfile
を含むディレクトリに移動し、次のコマンドを実行してDockerイメージを構築します。 -t
フラグを使用すると、画像にタグを付けることができますので、後でdocker imagesコマンドを使用して見つけやすくなります。
$ docker build -t <your username>/node-web-app .
あなたの画像はDockerによってリストされます。以下のコマンドを使用して画像を表示する:
$ docker images
REPOSITORY TAG ID CREATED
node latest 539c0211cd76 10 minutes ago
<your username>/node-web-app latest d64d3505b0d2 1 minute ago
イメージの実行
アプリケーションコンテンツ、 node
ベースイメージ、およびDockerfile
を使用して作成したばかりのイメージを実行できるようになりDockerfile
。新しく作成された<your username>/node-web-app
イメージを実行します。 docker run
コマンドに-d
スイッチを指定すると、デタッチモードでコンテナが実行され、コンテナはバックグラウンドで実行されます。 -p
フラグは、パブリックポートをコンテナ内のプライベートポートにリダイレクトします。次のコマンドを使用して、以前ビルドしたイメージを実行します。
$ docker run -p 49160:8080 -d <your username>/node-web-app
ターミナルで
docker ps
を実行して、アプリケーションの出力を表示します。出力は次のようになります。CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b701693b294 <your username>/node-web-app "npm start" 20 minutes ago Up 48 seconds 0.0.0.0:49160->8080/tcp loving_goldstine
docker logs <CONTAINER ID>
入力してアプリケーションの出力を取得します。この場合、 docker logs 7b701693b294
です。
出力: Running on http://localhost:8080
-
docker ps
出力から得られるポートマッピングは0.0.0.0:49160->8080/tcp
です。したがって、Dockerはコンテナの内部の8080
ポートをホストマシンのポート49160にマップしました。ブラウザでは、localhost:49160
入力できます。
curl
を使用してアプリを呼び出すこともできます:
$ curl -i localhost:49160
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
Date: Sun, 08 Jan 2017 14:00:12 GMT
Connection: keep-alive
Hello world