サーチ…


コンテナ内のBasic Node.jsアプリケーションの実行

ここで説明する例では、システムで動作するDockerのインストールと、Node.jsの操作方法の基本的な理解があることを前提としています。 Dockerの使い方を知っているなら、Node.jsフレームワークをシステムにインストールする必要はなく、Dockerから入手可能なnodeイメージのlatestバージョンを使用することが明らかです。したがって、必要に応じて、コマンドdocker pull node事前にイメージをダウンロードすることができdocker pull node 。 (コマンドはドッカーからnodeイメージの最新バージョンを自動的にpullsします)。

  1. すべての作業アプリケーションファイルが存在するディレクトリを作成します。アプリケーションと依存関係を記述する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"
       }
     }
    
  1. 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);
    
  2. Dockerに精通している方は、 Dockerfileを参照してDockerfileDockerfileは、アプリケーションに合わせてカスタマイズされたカスタムイメージを作成するために必要なすべてのコマンドを含むテキストファイルです。

現在のディレクトリに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_appCOPY . /usr/src/my_first_appして、すべてのアプリケーションファイルとソースコードをイメージの作業ディレクトリに追加します。

  • 次に、 EXPOSEディレクティブを使用して、アプリケーションがポート8080バインドしているため、結果のコンテナのポート8080を(コンテナ間のマッピングを介して)表示するようにデーモンに指示します。

  • 最後のステップでは、デーモンに対して、基本的なnpm startコマンドを実行して、イメージ内でコマンドnode server.jsを実行するよう指示します。コマンドに引数を取るCMDディレクティブを使用します。

      CMD [ "npm", "start" ] 
    
  1. 私たちは、その後、作成.dockerignoreと同じディレクトリにファイルをDockerfile私たちのコピーを防止するためにnode_modulesドッカーの画像へコピーされることから、当社のNode.jsシステムのインストールで使用してログを。 .dockerignoreファイルの内容は次のとおりです。

     node_modules
     npm-debug.log
    
  2. あなたのイメージを構築する

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
  1. イメージの実行

アプリケーションコンテンツ、 nodeベースイメージ、およびDockerfileを使用して作成したばかりのイメージを実行できるようになりDockerfile 。新しく作成された<your username>/node-web-appイメージを実行します。 docker runコマンドに-dスイッチを指定すると、デタッチモードでコンテナが実行され、コンテナはバックグラウンドで実行されます。 -pフラグは、パブリックポートをコンテナ内のプライベートポートにリダイレクトします。次のコマンドを使用して、以前ビルドしたイメージを実行します。

$ docker run -p 49160:8080 -d <your username>/node-web-app
  1. ターミナルで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

  1. 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      


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow