最初の記事「AzureContainerServiceでのDockerSwarmクラスターの作成」では、Azure Container Service(ACS)でのDockerSwarmクラスターの作成について説明しました。 Swarmの作成時に、各仮想マシン(マスターまたはエージェント)でDockerが実行されます。この続きの記事では、AzureContainerServiceで作成されたSwarmでのDockerの使用について説明します。スタンドアロンDockerとDockerSwarmモードサービスの両方の使用について説明します。この記事には次のセクションがあります:
- 環境の設定
- Docker情報の一覧表示
- HelloWorldDockerイメージの実行
- NginxDockerイメージの実行
- Dockerコンテナの一覧表示
- ブラウザでのNginxDockerコンテナへのアクセス
- Dockerコンテナの削除
- DockerSwarmモードの初期化
- Dockerサービスの作成
- Dockerサービスの一覧表示
- Dockerサービスタスクの一覧表示
- DockerサービスのDockerコンテナの一覧表示
- Dockerサービスコンテナによって生成されたログの調査
- 結論
環境の設定
最初の記事「AzureContainerServiceでのDockerSwarmクラスターの作成」と同じ環境を使用します。記事で説明されているように、ACSでSwarmクラスターを作成します。この記事では、3つのマスターノードと1つのエージェントノードで構成されるSwarmクラスターを使用して、スタンドアロンのDockerコンテナーとDockerSwarmモードサービスを実行します。
Docker情報の一覧表示
記事「AzureContainerServiceでのDockerSwarmクラスターの作成」で説明されているようにCloudShellを起動します。以前の記事でも説明したように、SSH RSA秘密鍵、ユーザー名、およびマスターのパブリックIPアドレスを使用してSwarmマスターVMに接続します。マスターVMに接続するためのSSHコマンドは次のとおりです。 SSH RSA秘密鍵、ユーザー名、およびパブリックIPアドレスは、ユーザーごとに異なります。
ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected]
接続が確立され、マスターVMのコマンドプロンプトが表示されます。
[email protected]:〜$ ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected] Ubuntu 14.04.4 LTS(GNU / Linux 3.19.0-65-generic x86_64)へようこそ*ドキュメント:https://help.ubuntu.com/2017年10月10日火曜日22:40:17UTC現在のシステム情報システム負荷:0.27プロセス:131使用量/:28.80GBの4.2%ログインしているユーザー:0メモリ使用量:eth0の2%IPアドレス:172.16.0.5スワップ使用量:0%docker0のIPアドレス:172.17.0.1このデータをグラフ化し、次の場所でこのシステムを管理します:https://landscape.canonical.com/ UbuntuAdvantageCloudでクラウドサポートを取得ゲスト:http://www.ubuntu.com/business/services/cloud新しいリリース「16.04.3LTS」が利用可能です。 'do-release-upgrade'を実行してアップグレードします。最終ログイン:2017年10月10日火曜日22:40:17から40.78.30.37
「AzureContainerServiceでのDockerSwarmクラスターの作成」の記事でプロビジョニングされたSwarmで3つのマスターノードが構成されました。マスターVMの数は1、3、または5です。複数のマスターVMを実行している場合、各マスターVMに接続するSSHコマンドは、SSHポート(1つのマスターの場合は2200、1つのマスターの場合は2201)を除いて同じです。 2マスター、3マスターの場合は2202、4マスターの場合は2203、5マスターの場合は2204。 3つのマスターVMの場合、使用されるSSHポートは2200、2201、および2202です。2つのマスターに接続するためのSSHコマンドは次のとおりです。
[email protected]:〜$ ssh -i /home/deepak/.ssh/id_rsa -p 2201 [email protected]
また、2マスターに接続するためのSSHコマンドは次のとおりです。
[email protected]:〜$ ssh -i /home/deepak/.ssh/id_rsa -p 2202 [email protected]
Dockerデーモンは172.16.0.5:2375で実行されています 。システム全体の情報を表示するには、 docker infoを実行します 指図。コマンドからの出力(部分的)が一覧表示されます:
[email protected]:〜$ docker -H 172.16.0.5:2375 infoContainers:0実行中:0一時停止:0停止:0画像:0役割:primaryStrategy:spreadNodes:1 swarm-agent-D50F2361000001:10.0.0.5:2375 Manager:falseカーネルバージョン:3.19.0-65-genericオペレーティングシステム:linuxArchitecture:amd64CPUs:2Total Memory:7.145GiB
HelloWorldDockerイメージの実行
ACS Swarmの各仮想マシンはDockerホストであり、スタンドアロンのDockerコンテナは任意のSwarmVMで実行できます。例として、マスターVMで「hello-world」Dockerイメージを実行します。
[email protected]:〜$ docker run hello-worldUnable to find image'hello-world:latest' locallatest:Pulling from library / hello-world5b0f327be733:Pull completeDigest:sha256:b2ba691d8aac9e5ac3644c0788e3d3823f9e97f757f01d2 ddc world:latestHello from Docker!このメッセージは、インストールが正しく機能しているように見えることを示しています。このメッセージを生成するために、Dockerは次の手順を実行しました。1。DockerクライアントがDockerデーモンに接続しました。 2. Dockerデーモンは、DockerHubから「hello-world」イメージをプルしました。 3. Dockerデーモンは、現在読み取っている出力を生成する実行可能ファイルを実行するそのイメージから新しいコンテナーを作成しました。 4. Dockerデーモンはその出力をDockerクライアントにストリーミングし、それをターミナルに送信しました。より野心的なことを試すには、次のコマンドでUbuntuコンテナーを実行できます。$ docker run -it ubuntu bashShare images、ワークフローの自動化など。無料のDockerID:https://cloud.docker.com/その他の例とアイデアについては、https://docs.docker.com/engine/userguide/[email protected]:〜$にアクセスしてください。
Dockerイメージhello-world SwarmではなくSwarmマスターVMで実行されています。マスターVMは、Swarm内のVMの1つにすぎません。 Docker Swarmは、エンドポイント172.16.0.5:2375をリッスンしています。 SwarmでDockerコンテナーを実行するには、次のセクションで説明するように、Swarmエンドポイントを提供する必要があります。 DockerコンテナがSwarmで実行されると、SwarmマスターはSwarmエージェントを割り当ててDockerコンテナを実行します。
NginxDockerイメージの実行
ハローワールド 前のセクションで使用したDockerイメージは、Docker化があまり行われておらず、メッセージを出力するだけの非常に基本的なDockerイメージです。このセクションでは、Dockerイメージ nginxを使用してスタンドアロンコンテナーを実行します。 Nginxサーバーの場合。次のコマンドは、 hello-nginxというDockerコンテナを作成します ホストのポート80を公開します。
docker run --name hello-nginx -d -p 80:80 nginx
docker runからの出力 コマンドが一覧表示されます:
[email protected]:〜$ docker run --name hello-nginx -d -p 80:80 nginxUnable to find image'nginx:latest' locallatest:Pulling from library / nginxbc95e04b23c0:Pull complete110767c6efff:Pull completef081e0c4df75:Pull completeDigest:sha256:004ac1d5e791e705f12a17c80d7bb1e8f7f01aa7dca7deee 6e65a03465392072ステータス:nginx:latestb3679edba090ff41482f3754b4d852d295985b501f6fa2a08b46c04b0014の新しいイメージをダウンロードしました前のdockerrun コマンドは、SwarmマスターVMでDockerコンテナーを実行します。 docker run 次のようにSwarmエンドポイントIPとポートを指定することにより、Swarmでコマンドを実行できます。
[email protected]:〜$ docker -H 172.16.0.5:2375 run --name hello-nginx -d -p 80:80 nginxddcbc335988f7b5dba762b436bfde4c22d01144d67313813ba140a5391bac8dfDockerコンテナの一覧表示
docker psを使用してマスターVM上のDockerコンテナを一覧表示します 指図。 hello-nginx Dockerコンテナが一覧表示されます。ユーザーが作成したのではなく、システムコンテナであるスウォームマネージャコンテナは、スウォームが作成されるときに作成されます。
編集者注: 次のコードリストの多くは幅が広すぎて正しく表示できないことに注意してください。リスト全体を表示するには、コードボックスを右にスクロールしてください。 |
[email protected]:〜$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb3679edba090 nginx "nginx -g'daemon..."3秒前Up2秒0.0.0.0:80->80/ tcp hello-nginxf82ebb6efa4f swarm:1.1.0 "/ swarm manage --r..."5分前3分アップ0.0.0.0:2375->2375/ tcp container_swarm_1
SwarmエンドポイントのDockerコンテナは、次のように一覧表示されます。
[email protected]:〜$ docker -H 172.16.0.5:2375 ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESddcbc335988f nginx "nginx -g'daemon ..." 36秒前アップ35秒10.0.0.5: 80-> 80 / tcp swarm-agent-D50F2361000001 / hello-nginx
Dockerコンテナは、Dockerコンテナ名 swarm-agent-D50F2361000001 / hello-nginx で示されるように、Swarmエージェントで実行されています。 。
ブラウザでのNginxDockerコンテナへのアクセス
前に説明したように、Swarmエンドポイントを使用してDockerコンテナーがSwarmで実行されると、SwarmマスターはSwarm内のSwarmエージェントの1つでコンテナーをスケジュールします。 SwarmエンドポイントのDockerコンテナで実行されているNginxサーバーにアクセスするには、SwarmエージェントのパブリックIPを使用する必要があります。使用したSwarmには、Swarmエージェントが1つだけあります。図1に示すように、SwarmエージェントのパブリックIPはリソースリストから取得できます。
図1: SwarmAgentのパブリックIPアドレス
または、リソースでSwarmエージェントのロードバランサーをクリックします 、図2に示すように。
図2: SwarmAgentロードバランサー
Swarmエージェントの詳細ページでIPアドレスを取得します(図3を参照)。
図3: SwarmAgentのIPアドレス
図4に示すように、IPアドレスはSwarmエージェントのロードバランサーの詳細ページから取得することもできます。
図4: ロードバランサーページのSwarmAgentパブリックIP
ローカルマシンのブラウザで、SwarmエージェントのパブリックIPアドレスに移動します。図5に示すように、Nginxサーバーのウェルカムページが表示されます。
図5: ブラウザでのNginxサーバーの呼び出し
Dockerコンテナの削除
Dockerコンテナを削除するには、 docker rmを実行します 指図。実行中のDockerコンテナは削除できません。まず、Dockerコンテナを停止します hello-nginx 群れで実行されています。
[email protected]:〜$ docker -H 172.16.0.5:2375 stop hello-nginxhello-nginx
その後、停止したコンテナを docker rmで削除できます。 。
[email protected]:〜$ docker -H 172.16.0.5:2375 rm hello-nginxhello-nginx
DockerSwarmモードの初期化
前に説明したように、Azure ContainerServiceSwarmではデフォルトでSwarmモードが有効になっていません。 Swarmモードは、 docker swarm initで初期化する必要があります コマンド。
[email protected]:〜$ docker swarm init --advertise-addr 52.176.1.213Swarmが初期化されました:現在のノード(ia4uj7431stu8y0j5h2yvdp27)がマネージャーになりました。
この群れにワーカーを追加するには、次のコマンドを実行します。
docker swarm join --tokenSWMTKN-1-5ksj7uqccgv1vnnmie09qmt191ldpupof4ihg4vhm083c20xsh -6uyq5653uo62e521bcoatzyyz52.176.1.213:2377
この群れにマネージャーを追加するには、「docker swarm join-token manager」を実行し、指示に従います。
docker node lsを使用してSwarmモードノードを一覧表示します 指図。 Swarmマネージャーノードが一覧表示されます。
[email protected]:〜$ docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUSia4uj7431stu8y0j5h2yvdp27*swarm-master-D50F2361-0レディアクティブリーダー
Dockerサービスの作成
Docker Swarmモードを初期化したら、 docker service createを使用してDockerサービスを作成します 指図。例として、Dockerイメージ alpine を使用して、2つのレプリカで構成されるDockerサービスを作成します。 とpingdocker.com。
[email protected]:〜$ docker service create--replicas 2 --name helloworld alpine ping docker.comtg1ywqiyei3jw9prco6890ol1
別の例として、Dockerイメージ tutum / hello-worldを使用してDockerサービスを作成します ポート8080のホストでサービスを公開します。
[email protected]:〜$ docker service create> --name hello-world> --publish 8080:80> --replicas 2> tutum / hello-world3e38c1595cddg0ckmoyasrnnu
Dockerサービスの一覧表示
docker service lsを使用してDockerサービスを一覧表示します 指図。前のセクションで作成した2つのサービスが一覧表示されます。
[email protected]:〜$ docker service lsID NAME MODE REPLICAS IMAGE PORTS3e38c1595cddhello-worldレプリケートされた2/2tutum / hello-world:latest *:8080-> 80 /tcptg1ywqiyei3jhelloworldレプリケートされた2/2 alpine:latest
Dockerサービスタスクの一覧表示
helloworldのDockerサービスタスクを一覧表示します Dockerイメージに基づくサービスalpine 。
[email protected]:〜$ docker service ps helloworldID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS0mal82mskbge helloworld.1 alpine:latest swarm-master-D50F2361-0 RunningRunning33秒agoiqz0bqkldxs2helloworld.2alpine:latest swarm- master-D50F2361-03秒前に実行中
hello-worldのDockerサービスタスクを一覧表示します tutum / hello-worldに基づくサービス Dockerイメージ。
[email protected]:〜$ docker servicepshello-worldID名前画像ノード望ましい状態現在の状態エラーポートSyok48ja4o835hello-world.1tutum / hello-world:latestswarm-master-D50F2361-0実行中38秒前x5tvcuglwzd0 hello-world.2 tutum / hello-world:latestswarm-master-D50F2361-038秒前に実行中
DockerサービスのDockerコンテナの一覧表示
Swarm内のDockerホスト上のDockerサービスのDockerコンテナは、 docker psで一覧表示される場合があります。 コマンド。
[email protected]:〜$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb6b069102300 tutum / hello-world:latest "/ bin / sh -c'php-f..."6分前6分80/ tcp hello-world.2.x5tvcuglwzd05olktbf3tpfqe62e26d4bc0ff tutum / hello-world:latest "/ bin / sh -c'php-f..."6分前アップ6分80/tcp hello-world.1.yok48ja4o835nc7cog8hhjlr7db4827da350b alpine:late pingdocker.com"7分前アップ7分helloworld.2.iqz0bqkldxs2sg8ny50je7e7y92dab9f7ae97alpine:latest" pingdocker.com"7分前アップ7分helloworld.1.0mal82mskbgecbcwh3op18nrr
hello-world用のDockerコンテナ およびhelloworld サービスが一覧表示されます。
Dockerサービスコンテナによって生成されたログの調査
DockerサービスのDockerコンテナに生成されたログがある場合は、 docker logsに一覧表示される場合があります 指図。例として、高山の画像ベースのサービスのコンテナIDを取得し、ログを一覧表示します。
[email protected]:〜$ docker logs db4827da350bPING docker.com(34.201.187.190):56データバイト
出力が示すように、docker.comドメインがpingされ、56バイトのデータが交換されます。
結論
この記事では、AzureContainerServiceのDockerSwarmクラスターでDockerを使用する方法について説明しました。 SwarmではスタンドアロンのDockerコンテナとDockerサービスを使用しました。 ACS上のSwarmクラスターは、Swarmエンドポイントを公開してスタンドアロンのDockerコンテナーを実行します。 DockerコンテナーがSwarmエンドポイントで実行される場合、SwarmはスタンドアロンのDockerコンテナーをSwarmエージェントで実行します。 Swarmモードはデフォルトでは有効になっていないため、SwarmマスターVMで初期化する必要があります。