MEANスタックアプリケーションをコンテナ化するためのDockerCompose



Docker Composeは、複数のコンテナーを定義して実行し、Dockerで複雑なアプリケーションを実行するためのツールです(MEANアプリケーションのコンテナー化など)。

Dockerに関する以前のブログでは、Dockerイメージ、Dockerコンテナー、およびそれらの必要性について読んでいました。あなたがそれらについて読んでいないなら、私はあなたに読むことを要求します 、DockerComposeに関するこのブログを続ける前に。

Dockerに伴う可能性を探求した後、さらに学ぶことは確かに非常にエキサイティングです。そうですね。少なくとも、私が挑戦に出くわしたときでした。





DockerComposeの概要

単一のサービスアプリケーションをコンテナ化するのは私にとって簡単でした。しかし、複数のサービスを別々のコンテナーにコンテナー化する必要があると、障害に遭遇しました。私の要件は、MEANスタックアプリケーションをコンテナ化してホストすることでした。

うん、あなたはそれを正しく読んだ。フルスタックアプリケーション。当初は不可能だと思っていました。しかし、Docker Composeについて聞いた後、すべての問題が解決されることがわかりました。



Docker Composeを使用して、MEANスタックアプリケーションのスタックごとに個別のコンテナーを作成(およびホスト)できます。 MEANは、MongoDB Express Angular&NodeJsの頭字語です。このブログで紹介するデモも同じトピックです。

Docker Composeを使用することで、これらの各テクノロジーを同じホスト上の別々のコンテナーでホストし、相互に通信させることができます。各コンテナは、他のコンテナと通信するためのポートを公開します。

これらのコンテナーの通信と稼働時間は、DockerComposeによって維持されます。



では、このインフラストラクチャ全体をどのようにセットアップするかを尋ねるかもしれません。それでは、もう少し詳しく説明させていただきます。

Dockerfile

dockerfileを作成して単一アプリケーションコンテナーをスピンする方法と同様に、単一コンテナーアプリケーションをそれぞれ構築するために個別のdockerfileを作成する必要があります。さらに、実際の作業を行うDockerComposeファイルも作成する必要があります。 Docker Compose Fileは、さまざまなdockerfileを実行してさまざまなコンテナーを作成し、それらを相互に対話させます。

この例では、MongoDB、ExpressJS、Angular、NodeJSで構成されるフルスタックアプリケーションがあります。 MongoDBはバックエンドデータベースを処理し、NodeJSとExpressJSはサーバー側のレンダリング用であり、Angularはフロントエンド用です。

MEANスタックアプリ-Docker作成-Edureka

コンポーネントは3つあるため、コンポーネントごとにコンテナを回転させる必要があります。次の方法でコンテナを回転させる必要があります。

  1. コンテナ1–角度
  2. コンテナ2–NodeJSおよびExpressJS
  3. コンテナ3– MongoDB

Dockerコンテナの作成

平均的なアプリケーションをドッキングするための最初のステップとして、Angularのコンテナーから始めて、各コンポーネントをビルドするためのdockerfileを作成しましょう。このdockerfileは、「package.json」ファイルとともにプロジェクトディレクトリ内に存在する必要があります。 「package.json」には、Angularアプリケーションを構築するために「NPM」が使用する必要のある依存関係のバージョンに関する詳細が含まれています。

1.フロントエンドのDockerfile

FROMノード:6RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm installCOPY。 / usr / src / app EXPOSE 4200 CMD ['npm'、 'start']

いつものように、最初のコマンドはベースイメージをプルすることであり、ベースの「node:6」イメージをプルします。

次の2つのコマンドは、Dockerコンテナ内にAngularコードを格納するための新しいディレクトリ「/ usr / src / app」を作成し、これをコンテナ内の作業ディレクトリにすることです。

次に、「package.json」ファイルをプロジェクトディレクトリからコンテナ内にコピーします。

次に、npmキャッシュをクリーンアップする「npmcacheclean」コマンドを実行します。

その後、「npm install」コマンドを実行して、Angularアプリのホストに必要なボイラープレートのダウンロードを開始します。 「package.json」で指定された依存関係のバージョンに基づいてボイラープレートのダウンロードを開始します。

次の「RUN」コマンドの実行は、存在するすべてのコード、フォルダをプロジェクトディレクトリからコンテナ内にコピーすることです。

上記のコマンドは、Web UIを介してフロントエンドクライアントにアクセスするユーザーによって行われた要求を送信するために、バックエンドサーバーと通信するためのポート番号4200を公開するようにコンテナーに要求します。

最後のコマンドは、「RUN」コマンドで「npm」を​​開始します。これにより、Angularアプリを構築するためのコードの実行が開始されます。

これでAngularアプリの準備が整いましたが、バックエンドサーバーとデータベースに依存しているため、適切にホストされません。それでは、さらに進んで、バックエンドサーバーをコンテナ化するためのdockerfileを作成しましょう。

2.バックエンド用のDockerfile

このdockerfileでさえ、プロジェクトディレクトリに存在します。このディレクトリには、Expressサーバーの依存関係やNodeJSの他の要件を定義するための「package.json」ファイルも含まれます。ただし、最も重要なのは、バックエンドサーバーをサポートするプロジェクトコードが含まれていることです。

FROMノード:6RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm installCOPY。 / usr / src / app EXPOSE 3000 CMD ['npm'、 'start']

ご覧のとおり、2つのdockerfileには多くの類似点があります。ベースイメージレイヤーと同じ「node:6」を使用し、コンテナ内に新しいディレクトリを作成して作業ディレクトリにし、「npminstall」コマンドを実行します。ただし、唯一の違いは、通信用に公開されているポート番号です。この場合、ポート番号3000が定義されています。これは、サーバーがホストされ、クライアントからの要求を探す場所です。

3.データベース

見出しに「dockerfileForDatabase」と記載していないのはなぜか疑問に思われるかもしれません。その理由は、実際にはカスタマイズする必要がないためです。データを保存するための「MongoDB」ベースイメージをすぐにプルして、アクセス可能なポート番号を公開するだけです。

さて、あなたの頭の中にある質問は、どこでそれをするのかということです。 DockerComposeファイルでそれを行うことができます。

Docker作成ファイル

Docker Compose Fileは、Dockerアプリケーションをセットアップするためのサービス、ネットワーク、およびボリュームに関する詳細を含むYAMLファイルです。

SQLの例の日付データ型

以下のコマンドを実行して、Dockerエンジンのバージョンを見つけます。

docker -v

コマンドを実行すると、ホストで実行されているバージョンが返されます。ホストのDockerEngineのバージョンに基づいて、適切なバージョンのDockerComposeをダウンロードします。ダウンロードする適切なバージョンを探すことができます。 Dockerの公式ドキュメント

Docker Engineバージョン17.05.0-ceを実行しているので、DockerComposeバージョン3を使用しました。

DockerComposeをインストールします

Composeをダウンロードするには、以下の一連のコマンドを実行します。

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- sudo chmod + x / usr / local / bin / docker-composeを作成します

コマンドのバージョン番号は、実行しているDockerEngineのバージョンに基づいて変わることに注意してください。

以下は、私のDockerComposeファイルの一部であるコマンドです。

version: '3.0'#docker-composeバージョンを指定します#実行するサービス/コンテナーを定義しますservices:angular:#最初のサービスビルドの名前:angular-app#Dockerfileポートのディレクトリを指定します:-'4200:4200' #ポートマッピングを指定するexpress:#2番目のサービスビルドの名前:express-server#Dockerfileポートのディレクトリを指定する:-'3000:3000'#ポートマッピングリンクを指定する:-database#このサービスをデータベースサービスデータベースにリンクする: #3番目のサービスイメージの名前:mongo#ポートからコンテナーを構築するイメージを指定:-'27017:27017'#ポート転送を指定

上記のファイルのコマンドは、あなたには意味がないと確信しています。それでは、その問題を解決しましょう。

コードの最初の行で、使用しているDockerComposeのバージョンを定義しました。これは、エラーをスローせずにComposeを正しく機能させる場合に非常に重要な手順です。 DockerEngineのバージョンに応じてDockerComposeバージョンをダウンロードしてください。

その後、「services」というキーワードを使用して3つのコンテナを定義しました。これらのサービスは、スタックの3つのコンポーネント、フロントエンド、バックエンド、データベースを参照します。したがって、この場合、コンテナの名前はサービスの名前、つまり「angular」、「express」、「database」になります。

キーワード「build」は、そのコンテナを回転させるためのdockerfileがそのディレクトリに存在することを示すために使用されます。待って、どうやって混乱しているの?

それは簡単です。 「build:」の後にパスを指定する必要があります。この場合、「angular-app」と「express-server」は、DockerComposeファイルが存在するディレクトリから到達できる2つのディレクトリへのパスです。データベースコンテナについては、dockerfileへのパスの代わりにベースの「image:mongo」を使用すると簡単に述べました。

vsはjavaです

これらのサービスごとに、他のコンテナー(サービス)からの要求の送受信に使用できるポート番号も指定しました。角度の場合は4200、急行の場合は3000、モンゴの場合は27017。

さらに、エクスプレスコンテナには、データベースコンテナへの「リンク:」があり、サーバー側で受信されたデータはすべてデータベースに送信され、そこで保存されることを示します。

ついに、Composeの設定が完了しました。 Docker Composeを起動し、3つのサービスで3つのコンテナーをスピンするには、Docker Composeファイル(YAMLファイル)が存在するディレクトリから以下の2つのコマンドを実行するだけです。

docker-compose build docker-compose up

「docker-composebuild」コマンドはサービスのビルド/再構築に使用されますが、「docker-composeup」コマンドはコンテナーの作成/開始に使用されます。先に行く!自分で試してみてください。

以下は、ビルドされて実行されているDockerイメージのスクリーンショットです。 Angularイメージが作成され、「angular:latest」という名前でタグ付けされていることがわかります。

また、Expressのイメージは、「express:latest」という名前とタグで作成されています。

イメージが作成されたので、イメージを実行して、プロセスでコンテナを回転させてみましょう。以下はそのスクリーンショットです。

以下は、「webpack:正常にコンパイルされました」というスクリーンショットです。これは、3つのサービスがDockerによって正常にコンテナ化されたことを意味します。

コンテナがホストされたので、それぞれのポートでアクティブなサービスを確認できます。 MEANアプリのGUIを操作するには、Webブラウザーに次のポート番号を入力してください。

localhost:4200 – Angularアプリ(フロントエンド)
localhost:3000 – Express ServerとNodeJS(バックエンド/サーバー側)
localhost:27017 – MongoDB(データベース)

まだ感動しましたか? Dockerはまだ完了していないので、待ってください。 「docker-composescale = ’x'」コマンドを使用すると、デプロイの数を簡単にスケールアップ/スケールダウンできます。つまり、サービス用にその数のコンテナーを作成できます。以下は、特定のサービスを「5」コンテナにスケーリングするための完全なコマンドです。

docker-compose scale = 5

サービスをこのように簡単にスケールアップし、コスト効率の高い方法でパッケージ化してコンテナ化することが、Dockerを最高のデプロイメントツールの1つにし、私の個人的なお気に入りにしています。

この概念についてまだ疑問がある場合は、DockerComposeのセットアップ方法の実践的な実践とともに同じ概念を説明した以下のビデオをご覧ください。

Docker Compose | MEANスタックアプリケーションのコンテナ化| DevOpsチュートリアル

Dockerについて学習したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。このEdurekaDocker認定トレーニングコースは、学習者がDockerの実装と習得に関する専門知識を習得するのに役立ちます。

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。