コンテナの「革命」アプリは、単なるデータベースやフロントエンド以上のものに成長しました。アプリケーションはさまざまなマイクロサービスに分割され、通常、REST API(通常はHTTPを介したJSON形式のペイロード)を介して相互に通信します。 Dockerコンテナーは、この種のアーキテクチャーに最適です。フロントエンドの「マイクロサービス」をDockerコンテナにパッケージ化したり、データベースを別のコンテナにパッケージ化したりすることができます。各サービスは、単一のソフトウェアとして記述されたモノリスではなく、事前定義されたRESTAPIを介して別のサービスと通信します。
分析エンジンなどの新しい機能や機能を実装する必要がある場合は、そのための新しいマイクロサービスを作成するだけで、ウェブアプリのさまざまなマイクロサービスによって公開されるRESTAPIを介してデータを消費します。また、機能が時間の経過とともに大きくなるにつれて、このマイクロサービスのリストもそれに伴って大きくなります。
個々のコンテナをデプロイして構成してから、他のすべてのコンテナと通信するように構成する必要はありません。それは3つのコンテナでさえ退屈になるでしょう。 Docker-Composeを使用すると、複数のコンテナーのデプロイを自動化できます。
Docker-Composeは、マイクロサービスの抽象的なアイデアをDockerコンテナーの機能セットに変換するのに役立つ最も単純なツールの1つです。
分散システム
Webアプリを複数のコンテナーに分割して開いたので、Docker SwarmやKubernetesなどのサービスが機能する単一のサーバー(さらに悪いことに、単一の仮想マシン上)にすべてを保持することはほとんど意味がありません。
Docker Swarmを使用すると、複数のサーバー間でアプリケーションの複数のレプリカを実行できます。マイクロサービスが「水平方向」に拡張できるように記述されている場合は、Docker Swarmを使用して、複数のデータセンターと複数のリージョンにWebアプリをデプロイできます。これにより、1つ以上のデータセンターまたはネットワークリンクの障害に対する回復力が提供されます。これは通常、Dockerのサブコマンド、つまりDockerStackを使用して実行されます。
NS Dockerスタック サブコマンドはDocker-Composeコマンドと非常によく似た動作をするため、いずれかのテクノロジを使用している人に誤解を招く可能性があります。
混乱の原因
使用法とワークフローの点では、両方のテクノロジーは互いに非常によく似ており、これが混乱を引き起こします。 Docker SwarmまたはDocker-Composeを使用してアプリをデプロイする方法は、非常によく似ています。 YAMLファイルでアプリケーションを定義します。このファイルには、イメージ名、各イメージの構成、および各マイクロサービスがデプロイで満たす必要のあるスケール(レプリカの数)が含まれます。
違いは主にバックエンドにあり、docker-composeはコンテナーを単一のDockerホストにデプロイし、DockerSwarmはコンテナーを複数のノードにデプロイします。大まかに言えば、docker-composeが実行できるほとんどのことを実行できますが、複数のDockerホストにまたがってスケーリングします。
類似点
Docker SwarmとDocker-Composeには、次の類似点があります。
- どちらも、アプリケーションスタックのYAML形式の定義を取ります。
- これらは両方とも、マルチコンテナアプリケーション(マイクロサービス)を処理することを目的としています。
- どちらにもスケールパラメータがあり、同じイメージの複数のコンテナを実行して、マイクロサービスを水平方向にスケーリングできます。
- これらは両方とも同じ会社、つまりDocker、Incによって管理されています。
違い
Docker SwarmとDocker-Composeのいくつかの違い:
- Docker Swarmは、1つ以上のサーバー間でWebアプリをスケーリングするために使用されます。 Docker-composeは、単一のDockerホストでWebアプリを実行するだけです。
- WebアプリのスケーリングDockerSwarmは、真剣な高可用性とフォールトトレランスを提供します。単一のホストでDocker-Composeを使用してWebアプリをスケーリングすることは、テストと開発にのみ役立ちます。
- Docker Swarmと、DockerSwarmやDockerStackなどの関連サブコマンドは、DockerCLI自体に組み込まれています。これらはすべて、ターミナルを介して呼び出すDockerバイナリの一部です。 Docker-Composeは、それ自体がスタンドアロンのバイナリです。
Docker-Composeのユースケース
上記のように、これらは両方とも完全に異なるツールであり、それぞれが完全に異なる問題を解決するため、一方が他方の代替となるわけではありません。ただし、新参者に私が話していることを理解してもらうために、DockerComposeの使用例を次に示します。
単一のサーバーでWordPressブログをセルフホストしたいとします。手動で設定または維持する必要はないので、代わりにDockerとDocker-composeをVPSにインストールし、以下のようにWordPressスタックのさまざまな側面をすべて定義する単純なYAMLファイルを作成します。 :
注:以下を使用してWordPressサイトを展開している場合は、すべてのパスワードを安全なものに変更してください。さらに良いことに、Dockerシークレットを使用して、パスワードなどの機密データをプレーンテキストファイルに保存するのではなく保存します。
バージョン:「3」サービス:
db:
画像:mysql:5.7
ボリューム:
--db_data:/どこ/lib/mysql
再起動:常に
環境:
MYSQL_ROOT_PASSWORD:somewordpress
MYSQL_DATABASE:ワードプレス
MYSQL_USER:ワードプレス
MYSQL_PASSWORD:ワードプレス
ワードプレス:
depends_on:
--db
画像:ワードプレス:最新
ポート:
-「8000:80」
再起動:常に
環境:
WORDPRESS_DB_HOST:db:3306
WORDPRESS_DB_USER:ワードプレス
WORDPRESS_DB_PASSWORD:wordpressPassword
WORDPRESS_DB_NAME:ワードプレス
ボリューム:
db_data:{{}
ファイルが作成され、DockerとDocker-composeの両方がインストールされたら、実行する必要があるのは次のとおりです。
$docker-構成する-NSそして、あなたのサイトは稼働します。更新がある場合は、次を実行します。
$docker-compose down次に、古いDockerイメージを破棄し、docker-compose up -dコマンドを実行すると、新しいイメージが自動的に読み込まれます。永続データはDockerボリュームに保存されているため、ウェブサイトのコンテンツが失われることはありません。
DockerSwarmを使用する場合
Docker-composeは自動化ツールですが、DockerSwarmはより要求の厳しいアプリケーションを対象としています。並行してスケーリングする必要がある数百または数千のユーザーまたはワークロードを持つWebアプリ。大規模なユーザーベースと厳しいSLA要件を持つ企業は、DockerSwarmのような分散システムを使用することをお勧めします。アプリが複数のサーバーと複数のデータセンターで実行されている場合、影響を受けるDCまたはネットワークリンクによるダウンタイムの可能性が大幅に減少します。
とはいえ、Kubernetesのような競合するテクノロジーの方が間違いなくこのタスクに適しているため、本番ユースケースにはDockerSwarmをお勧めすることを躊躇します。 Kubernetesは多くのクラウドプロバイダーでネイティブにサポートされており、Dockerコンテナで非常にうまく機能するため、Kubernetesを利用するためにアプリを再構築する必要もありません。
結論
Dockerとその衛星プロジェクトでのこのとりとめのない話が有益であり、Dockerエコシステムへの準備が整っていることを願っています。