仮想マシン
 Computer >> コンピューター >  >> ソフトウェア >> 仮想マシン

Docker Engine swarm モード - 入門チュートリアル

パンク・ロック・バンドのようです。しかし、これはまったく新しいオーケストレーション メカニズムであり、Docker で利用可能なオーケストレーションの改良です。古いバージョンの Docker を使用している場合は、Swarm を手動でセットアップして Docker クラスターを作成する必要があります。バージョン 1.12 以降、Docker エンジンにはネイティブ実装が付属しており、シームレスなクラスタリングのセットアップが可能です。私たちがここにいる理由。

このチュートリアルでは、オーケストレーションに関して Docker ができることを紹介します。この記事は決してすべてを網羅しているわけではありません (ベッド &ブレックファースト)。私の後。

テクノロジーの概要

非常に詳細で非常に有用な Docker ドキュメントの記事を書き直すのは残念なので、テクノロジの概要を簡単に説明します。それで、Docker があります。ここで、複数のサーバーを Docker ホストとして使用したいと考えていますが、それらを同じ論理エンティティーに属させたいと考えています。したがって、クラスタリング。

1つのクラスターから始めましょう。ホストで swarm を開始すると、ホストはクラスターのマネージャーになります。技術的に言えば、1つのノードのコンセンサスグループになります。背後にある数学的論理は、Raft アルゴリズムに基づいています。マネージャーは、タスクのスケジューリングを担当します。タスクはワーカー ノードに 1 回委任されます。これは Node API によって管理されます。 API という言葉は嫌いですが、ここでは使わなければなりません。

サービス API は、この実装の 2 番目のコンポーネントです。これにより、マネージャ ノードは群れ内のすべてのノードで分散サービスを作成できます。サービスは、分散メカニズムを使用してクラスター全体に分散されることを意味するレプリケートすることができます。また、サービスのインスタンスが各ノードで実行されることを意味するグローバルにすることもできます。

ここではさらに多くの作業が行われていますが、これで十分に準備が整い、興奮します。では、実際に手を動かしてみましょう。私たちのターゲット プラットフォームは CentOS 7.2 です。これは非常に興味深いことです。このチュートリアルを書いた時点では、リポジトリに Docker 1.10 しかなく、swarm を使用するにはフレームワークを手動でアップグレードする必要があったからです。これについては、別のチュートリアルで説明します。次に、新しいノードをクラスターに参加させるフォローアップ ガイドも作成し、Fedora で非対称セットアップを試します。この時点で、正しいセットアップが行われていると仮定して、クラスター サービスを起動して実行してみましょう。

設定イメージとサービス

複数のインスタンスが単一の IP アドレスを介してコンテンツを提供する、負荷分散された Apache サービスのセットアップを試みます。かなり標準的。また、可用性、冗長性、水平方向のスケーリング、およびパフォーマンスなど、クラスター構成を使用する一般的な理由についても説明します。もちろん、ネットワーク部分やストレージも考慮する必要がありますが、それはこのガイドの範囲を超えています。

実際の Dockerfile テンプレートは、httpd の下の公式リポジトリで入手できます。開始するには、最小限のセットアップが必要です。画像をダウンロードする方法、独自の画像を作成する方法などの詳細については、このチュートリアルの冒頭にリンクされているイントロ ガイドを参照してください。

docker build -t my-apache2 .
ビルド コンテキストを Docker デーモンに送信する 2.048 kB
ステップ 1 :httpd:2.4 から
リポジトリ docker.io/library/httpd をプルしようとしています ...
2.4:docker.io/library/httpd からのプル

8ad8b3f87b37:プル完了
c95e1f92326d:プル完了
96e8046a7a4e:プル完了
00a0d292c371:プル完了
3f7586acab34:プル完了
ダイジェスト:sha256:3ad4d7c4f1815bd1c16788a57f81b413...a915e50a0d3a4
ステータス:docker.io/httpd:2.4 の新しいイメージをダウンロードしました
---> fe3336dd034d
ステップ 2 :COPY ../public-html/ /usr/local/apache2/htdocs/
...

先に進む前に、1 つのインスタンスを開始し、コンテナーがエラーなしで作成され、Web サーバーに接続できることを確認する必要があります。それを確立したら、分散サービスを作成します。

docker run -dit --name my-running-app my-apache2

IP アドレスを確認し、ブラウザにアクセスして、何が表示されるかを確認します。

Swarm の開始とセットアップ

次のステップは、群れを動かすことです。これは、作業を開始するための最も基本的なコマンドであり、Docker ブログで使用されている例と非常によく似ています:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest

ここには何がありますか? 5 つのコンテナー インスタンスを使用して、frontend というサービスを作成しています。また、hostPort 80 を containerPort 80 にバインドします。これには、新しく作成した Apache イメージを使用します。ただし、これを行うと、次のエラーが発生します:

docker service create --name フロントエンド --replicas 5 -p 80:80/tcp my-apache2:latest
デーモンからのエラー応答:このノードは swarm マネージャーではありません。 「docker swarm init」または「docker swarm join」を使用してこのノードを swarm に接続し、再試行してください。

これは、現在のホスト (ノード) を swarm マネージャーとして設定していないことを意味します。スウォームを初期化するか、既存のスウォームに参加する必要があります。まだ持っていないので、初期化します:

ドッカーの群れの初期化
Swarm が初期化されました:現在のノード (dm58mmsczqemiikazbfyfwqpd) がマネージャーになりました。

このスウォームにワーカーを追加するには、次のコマンドを実行します。

docker swarm に参加 \
--token SWMTKN-1-4ofd46a2nfyvrqwu8w5oeetukrbylyznxla
9srf9vxkxysj4p8-eu5d68pu5f1ci66s7w4wjps1u \
10.0.2.15:2377

この swarm にマネージャーを追加するには、「docker swarm join-token manager」を実行し、指示に従います。

出力はかなり自明です。群れを作りました。新しいノードは、正しいトークンを使用して群れに参加する必要があります。ファイアウォール ルールが必要な場合は、IP アドレスとポートも識別されます。さらに、スウォームにマネージャーを追加することもできます。ここで、サービス作成コマンドを再実行します:

docker service create --name フロントエンド --replicas 5 -p 80:80/tcp my-apache2:latest
6lrx1vhxsar2i50is8arh4ud1

接続のテスト

それでは、サービスが実際に機能することを確認しましょう。ある意味では、これは Vagrant と coreOS で行ったことと似ています。結局、コンセプトはほとんど同じです。それは同じアイデアの異なる実装です。まず、docker ps は正しい出力を表示するはずです。作成したサービスには複数のレプリカが必要です。

ドッカーps
コンテナ ID 画像 コマンド 作成済み ステータス ポート
名前
cda532f67d55 my-apache2:latest "httpd-foreground"
2 分前 2 分前 80/tcp frontend.1.2sobjfchdyucschtu2xw6ms9a
75fe6e0aa77b my-apache2:latest "httpd-foreground"
2 分前 2 分前 80/tcp frontend.4.ag77qtdeby9fyvif5v6c4zcpc
3ce824d3151f my-apache2:latest "httpd-foreground"
2 分前 2 分前 80/tcp frontend.2.b6fqg6sf4hkeqs86ps4zjyq65
eda01569181d my-apache2:latest "httpd-foreground"
2 分前 2 分前 80/tcp frontend.5.0rmei3zeeh8usagg7fn3olsp4
497ef904e381 my-apache2:latest "httpd-foreground"
2 分前 2 分前 80/tcp frontend.3.7m83qsilli5dk8rncw3u10g5a

デフォルト以外のさまざまなポートでもテストしましたが、うまく機能します。サーバーに接続して応答を取得する方法には、多くの余裕があります。正しいポートで localhost または docker インターフェイスの IP アドレスを使用できます。以下の例は、ポート 1080 を示しています:

さて、これは非常に大まかな、非常に単純な始まりです。本当の課題は、最適化されたスケーラブルなサービスを作成することですが、適切な技術的なユース ケースが必要です。さらに、docker info および docker service (inspect|ps) コマンドを使用して、クラスターの動作について詳しく知る必要があります。

考えられる問題

Docker と swarm を使用しているときに、いくつかの小さな (またはそれほど小さくない) 問題に遭遇する場合があります。たとえば、SELinux は、何か違法なことをしようとしていると文句を言うかもしれません。ただし、エラーや警告が邪魔になることはあまりありません。

Docker サービスは docker コマンドではありません

レプリケートされたサービスを開始するために必要なコマンドを実行しようとすると、 docker:'service' is not a docker command というエラーが表示されます。これは、適切なバージョンの Docker がないことを意味します (-v で確認してください)。これは、後続のチュートリアルで修正します。

docker service create --name フロントエンド --replicas 5 -p 80:80/tcp my-apache2:latest
docker:'service' は docker コマンドではありません。

Docker タグが認識されません

次のエラーが表示される場合もあります:

docker service create -name frontend -replicas 5 -p 80:80/tcp my-apache2:latest
デーモンからのエラー応答:rpc エラー:コード =3 desc =ContainerSpec:"-name" は有効なリポジトリ/タグではありません

これについては、いくつかの議論スレッドがあります。エラーは実際にはまったく無害かもしれません。ブラウザーからコマンドをコピーした可能性があり、ハイフンが正しく解析されない可能性があります。それと同じくらい簡単です。

続きを読む

このトピックについては、Docker 1.12 より前の Swarm 実装や、現在のバージョンの Docker エンジンなど、まだ語るべきことがたくさんあります。つまり、怠惰にならず、時間をかけて読んでください:

Docker Swarm の概要 (スタンドアロンの Swarm インストール用)

本番用の Swarm クラスターを構築する (スタンドアロン セットアップ)

Docker Swarm のインストールと作成 (スタンドアロン セットアップ)

Docker engine swarm overview (for version 1.12)

Getting started with swarm mode (for version 1.12)

結論

There you go. Nothing too grand at this point, but I believe you will find the article useful. It covers several key concepts, there's an overview of how the swarm mode works and what it does, and we successfully managed to download and create our own Web server image and then run several clustered instances of it. We did this on a single node for now, but we will expand in the future. Also, we tackled some common problems.

I hope you find this guide interesting. Combined with my previous work on Docker, this should give you a decent understand of how to work with images, the networking stack, storage, and now clusters. Warming up. Indeed, enjoy and see you soon with fresh new tutorials on Docker. I just can't contain [sic] myself.

乾杯。


  1. KVM でストレージを管理する方法 - チュートリアル

    数日前、カーネルベースの仮想マシン (KVM) テクノロジを紹介しました。これは、VirtualBox および VMware 製品の代わりに、またはそれらと一緒に使用することを検討できる無料のオープンソースの仮想化ソリューションです。いずれにせよ、基本的な管理に手を出しましたが、ストレージとネットワークは別のチュートリアルのために残しました. 今日は、KVM でのストレージの管理に関するより詳細なガイドを提供したいと思います。これは、仮想ディスクの追加、縮小、拡張など、VirtualBox で行ったことと多少似ています。 NFS ストレージや NTFS でフォ​​ーマットされた USB 接

  2. VirtualBox でディスクのクローンを作成する方法 - チュートリアル

    ビジネスまたは娯楽で仮想化を使用している場合、VirtualBox に出くわしたことがあるかもしれません。VirtualBox は非常に強力で汎用性の高い無料のソリューションであり、デスクトップ ユーザーがオペレーティング システムを導入する際に非常に柔軟に対応できます。 また、マニアックな趣味で仮想化を楽しんでいるだけの愛好家や、仮想化のおかげで新しいオペレーティング システムの使い方を学んでいる熱心なソフトウェア愛好家以上の場合は、次のシナリオに遭遇することになります。多数の仮想マシンを展開します。 個々のインストールをいじる時間はありません。実際、マシンを 1 つずつ手動で構成す