開発者ドキュメント

Ubuntu16.04でdryを使用してDockerコンテナを管理および監視する方法

序章

dry は、Dockerコンテナーとそのイメージを操作するために構築されたシンプルですが広範なターミナルアプリケーションです。 ドライを使用すると、ルーチン Docker Engineコマンドの実行に伴う繰り返しがなくなり、ネイティブのDockerCLIのより視覚的な代替手段も提供されます。

dryには、コンテナーをすばやく開始および停止し、Dockerイメージを安全にまたは強制的に削除し、リアルタイムのコンテナープロセスを継続的に監視し、Dockerのinfoinspecthistory、およびlogコマンド。

公式のDockerEngineCLIを介して実行できるほとんどのコマンドは、同じ動作と結果で、ドライでより簡単に利用できます。 dryには、Docker Swarm機能が追加されており、マルチホストコンテナのセットアップを監視および管理するためのアウトレットを提供します。

このチュートリアルでは、dryをインストールし、その最も便利な機能のいくつかを探ります。

前提条件

このチュートリアルに従うには、次のものが必要です。

ステップ1—ドライインストール

まず、Dockerサーバーにdryをインストールする必要があります。 ドライバイナリの最新バージョンは、dryのGitHubリリースページで入手できます。

dry-linux-amd64バイナリの最新バージョン、つまり発行時にv0.9-beta.3をダウンロードします。

  1. wget https://github.com/moncho/dry/releases/download/v0.9-beta.3/dry-linux-amd64

次に、新しいバイナリファイルをdry-linux-amd64から/usr/local/bin/dryに移動して名前を変更します。

  1. sudo mv dry-linux-amd64 /usr/local/bin/dry

/usr/local/binは、サーバーにローカルなプログラムのバイナリを格納するために使用される標準の場所です。 ドライバイナリをそのディレクトリに移動すると、そのディレクトリがシェルの $ PATH環境変数に含まれているため、サーバー内のどこからでもコマンドラインでドライを呼び出すことができます。

バイナリの権限をchmodで変更して、実行できるようにします。

  1. sudo chmod 755 /usr/local/bin/dry

-vオプションを指定してプログラムを実行することにより、dryにアクセスでき、正しく機能していることをテストできます。

  1. dry -v

これにより、バージョン番号とビルドの詳細が返されます。

Version Details Output
dry version 0.9-beta.2, build d4d7a789

ドライが設定されたので、使ってみましょう。

ステップ2—Dockerコンテナとの対話

乾いた状態で実行して、ターミナルにダッシュボードを表示します。

  1. dry

ダッシュボードの上部には、Dockerバージョン、Docker Engine APIバージョン、サーバーがDocker Swarm対応のワーカー/マネージャーノードであるかどうか、サーバーのホスト名とリソースなど、サーバーとDockerソフトウェアに関する情報が表示されます。

ダッシュボードの下部には、ドライのさまざまな部分にアクセスするために使用できるナビゲーションキーのリファレンスがあります。

Navigation key options
[H]:Help [Q]:Quit | [F1]:Sort [F2]:Toggle Show Containers [F5]:Refresh [%]:Filter | [m]:Monitor mode [2]:Images [3]:Networks [4]:Nodes [5]:Services | [Enter]:Commands

レンダリングにエラーがある場合は、いつでもF5を使用してドライの表示を更新できます。

このダッシュボード自体は、最初にドライを開始したときにデフォルトでContainersリストになります。 このビューでは、ホストのコンテナの一般的な状態を確認できます。

前提条件のチュートリアルのWordpress、MariaDB、PHPMyAdminコンテナスタックの例を使用している場合は、新しく作成された3つのコンテナが一覧表示されます。

キーボードの上下矢印を使用してWordpressコンテナーを選択し、ENTERを押します。

これにより、ポートマッピング、ネットワークリンク、ネットワークコンテナのIPアドレスなど、コンテナに関する情報が画面の上部に表示されます。

WordPress Container Statistics
Container Name: wordpress_wordpress_1 ID: f67f9914b57e Status: Up 13 minutes Image: wordpress Created: About an hour ago Command: docker-entrypoint.sh apache2-foreground Port mapping: 0.0.0.0:8080->80/tcp Network Name: bridge IP Address: 172.17.0.3 Labels 6

コンテナを選択すると、画面の中央下にも選択可能なオプションの新しいリストが表示されます。

警告Kill containerおよびRemove Containerオプションは即座に発行され、確認プロンプトがないため、注意してください。

ESCキーを押して、ダッシュボードのルートContainersセクションに戻ります。 ここから、Imagesセクションを見ていきます。

ステップ3—Dockerイメージとの対話

Containersセクションから、2を押して、ドライのImagesセクションにアクセスします。

このセクションでは、 dockerimageinspectコマンドに簡単にアクセスできます。 dryには、ナビゲーションバーに表示される便利なキーボードショートカットもいくつかあります。

これまで、ドライのコンテナと画像のセクションを見てきました。 探索する最後のセクションはネットワークです。

ステップ4—Dockerネットワークとの対話

Imagesセクションで、3を押して、Networksセクションにアクセスします。

このセクションは、Dockerコンテナのネットワークリンクとネットワーク構成を確認するのに理想的です。

CTRL+Eを使用してDockerからネットワークを削除できますが、bridgeのような事前定義されたデフォルトのDockerネットワークを削除することはできません。 ただし、例として、矢印キーでbridgeを削除してみることができます。 次のような長い出力が表示されます。

Output
. . . "Containers": { "34f8295b39b7c3364d9ceafd4e96194f210f22acc41d938761e1340de7010e05": { "Name": "wordpress_wordpress_db_1", "EndpointID": "68370df8a13b92f3dae2ee72ff769e5bdc00da348ef3e22fa5b8f7e9e979dbd5", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }, "e7105685e0e6397fd762949e869095aa4451a26cdacdad7f5e177bde52819c4a": { "Name": "wordpress_wordpress_1", "EndpointID": "44ea3a133d887c5352b8ccf70c94cda9f05891b2db8b99a95096a19d4a504e16", "MacAddress": "02:42:ac:11:00:04", "IPv4Address": "172.17.0.4/16", "IPv6Address": "" }, "e7d65c76b50ff03fc50fc374be1fa4bf462e9454f8d50c89973e1e5693eef559": { "Name": "wordpress_phpmyadmin_1", "EndpointID": "7fb1b55dd92034cca1dd65fb0c824e87a9ba7bbc0860cd3ed34744390d670b78", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }, . . .

上記の出力の一部は、コンテナリンクとコンテナbridgeネットワークのネットワークIPアドレスとMACアドレスを示しています。 これにより、すべてのコンテナがbridgeネットワークのメンバーであり、通信できることを確認できます。これは、コンテナネットワークが有効であることを示す基本的な指標です。

ESCを使用して、ネットワーク出力を閉じます。 ドライのContainersImages、およびNetworksセクションを確認したので、ドライの監視機能に移りましょう。

ステップ5—Dockerコンテナの監視

Mキーを押すと、現在のサーバー/ホストで実行中のすべてのコンテナーの概要がすばやく要約されます。 この画面には、ContainersImagesNetworksなど、ドライのルートセクションからアクセスできます。

この情報の一部はプログラムの他の場所(Stats + Topコンテナオプション内など)に一覧表示されますが、このビューはすべてのコンテナに関する情報の中央の場所を提供し、スタック全体を監視できます。 これは、大量のコンテナを管理する場合に役立ちます。

Qを押してダッシュボードを終了します。 ここから、DockerSwarmを使用してドライセットアップを行います。

手順6— Docker Swarm Cluster Managerにdryをインストールする(オプション)

ローカルコンピューターから、ユーザーdocker-machineを使用して、指定したクラスターマネージャーノードにSSHで接続します。 Docker Swarmの前提条件チュートリアルでは、これはnode-1として設定されていました。

  1. docker-machine ssh node-1

ドライをインストールする別の方法を示すために、curl公式インストールスクリプトを実行してください。 curl ... | shパターンを避けたい場合は、手順1のように乾式でインストールできます。

  1. curl -sSf https://moncho.github.io/dry/dryup.sh | sh

インストールスクリプトは、ドライバイナリを/usr/local/binに自動的に移動します。

Output
dryup: Moving dry binary to its destination dryup: dry binary was copied to /usr/local/bin, now you should 'sudo chmod 755 /usr/local/bin/dry'

手順1で行ったように、バイナリの権限を更新します。

  1. sudo chmod 755 /usr/local/bin/dry

さあ、乾かしてみてください。

  1. dry

最初のContainersセクションの右上に、前の手順で空白だったSwarmおよびNode roleステータス行が表示されるようになりました。

Output
Swarm: active Node role: manager Nodes: 3

また、長い画像名がリストされた2つのコンテナが表示されます。 他の3つのコンテナは、他のSwarmワーカーノードに分散されており、前提条件のチュートリアルのwebserverサンプルサービスによって定義されています。

クラスタマネージャのドライインストールの準備ができているので、次にDockerSwarmでドライがどのように機能するかを見てみましょう。

ステップ7— Docker Swarmノードとの対話(オプション)

Containersセクションで、4を押して、Nodesセクションに移動します。

このセクションでは、各ノードの役割(マネージャーまたは作業)、ステータス、可用性など、いくつかの有用なメトリックを示します。 画面上部の行には、リソース消費情報が表示されます。

ここから、矢印キーを使用してnode-2を選択し、ENTERを押します。 これにより、個々のノードのタスクがプルアップされます。

webserverサービスに関しては、node-2は5つのネットワークコンテナーの1番目と2番目を保持します。 このビューのタスクは、2つのコンテナのCURRENT STATEがアクティブであることを示し、それらが実行されている時間を一覧表示します。 ここでの独自のコンテナ名の番号付けは異なる場合があります。 コンテナが割り当てられているワーカーノードによって異なります。これは、Dockerサービスコマンドによって決定されます。

ESCを押して、Nodesセクションに戻り、ここでドライのキーバインディングのいくつかを調べることができます。

Docker Swarmを使用する場合の一般的なタスクは、特定のノードの状態または可用性を変更することです。 node-1をもう一度強調表示し、CTRL+Aを押すと、Set Availabilityプロンプトが表示されます。

Output
Changing node availability, please type one of ('active'|'pause'|'drain')

drainと入力し、ENTERで確認します。

ドレインオプションは、ノードがSwarmクラスターマネージャーから新しい指示を受信するのを防ぎ、通常、計画されたミアンテナンスに使用されます。 ドレインを使用するということは、ノードマネージャが、ドレインされたノードの一時的なダウンタイムを補正するアクティブな可用性に設定された別のノードでレプリカを起動することも意味します。

drainコマンドを送信すると、左上のステータスメッセージでアクションが確認されます。

左上に表示されるステータスメッセージに、このアクションの確認が表示されます。 この変更は、AVAILABILITY列にも反映されます。

Output
Node iujfrchorop9mzsjswrclzcmb availability is now drain

AVAILABILITY列に変更が反映されていることにも気付くでしょう。

node-2を元に戻すには、もう一度強調表示し、CTRL+Aを押して、Set Availabilityプロンプトを元に戻します。 今回は、activeと入力し、ENTERを押します。

このアクションの確認メッセージも表示されます。

Output
Docker daemon: update wrclzcmb availability is now active

使用しなかったオプションpauseは、ノードで見つかった各コンテナ内のすべてのプロセスを、activeとして再度設定されるまで一時的に停止します。

最後のステップでは、DockerSwarmサービスをドライで操作します。

ステップ8— Docker Swarmサービスとの対話(オプション)

5を押して、ドライのServicesセクションを表示します。

前提条件のチュートリアルでは、インスタンスを複製するように設定されたwebserverという1つのサービスのみを設定します(つまり、 新しいコンテナを作成します)必要に応じて最大5つまで。 このビューは、5/5レプリカがアクティブであることを確認し、サービスが使用しているポートマッピングとその分散タスクを示します。

ドライを使用して、サービスの詳細を確認できます。 webserverサービスが強調表示されたら、ENTERを押します。

この詳細なサービスビューには、サービスとそのSwarmノードの状態に関する多くの情報が含まれています。

興味深いことに、サービスが5に設定されているにもかかわらず、ここに7つのタスクがリストされていることに気付くかもしれません。 これは、Docker Swarmが、node-2をドレインモードに切り替えたときに、ステップ7のテストから2つの追加のレプリカタスクを作成したためです。

ドライを使用して、レプリカの最大数を増やすこともできます。 ESCを押してServicesセクションに戻り、webserverサービスを強調表示しながらCTRL+Sと入力します。 これにより、スケーリングプロンプトが表示されます。

Output
Scale service. Number of replicas?

コンテキストでは、このサービスのスケーリングは、Webトラフィックの増加による追加リソースの需要を満たすのに役立ちます。 プロンプトに8と入力し、ENTERを押して、レプリカの数を8に増やしましょう。

この確認メッセージを確認して、アクションを確認してください。

Output
Docker daemon: update v6gbc1ms0pi scaled to 8 replicas

これで、サービスのServicesビューリスト8/8レプリカを確認できます。

サービスを完全に削除する場合は、サービスを強調表示してCTRL+Rを押し、サービス削除プロンプトを表示します。

Output
About to remove the selected service. Do you want to proceed? y/N

webserverサービスを削除できます。

最後に、Qを押してダッシュボードを終了し、プログラムを終了します。

結論

このチュートリアルに従うことで、DockerホストとDockerSwarmクラスターマネージャーでdryをセットアップしました。 このチュートリアルでは、Dockerコンテナー、イメージ、ネットワーク、Docker Swarmノードおよびサービスとの対話など、dryの機能の基本についても説明しました。

Dockerを実行しているリモートホストにdryを接続する2番目の方法があります。これは、dryを実行しているときにリモートホストのIPアドレスで-Hオプションを使用します。 これは、ドライバイナリをインストールすることができない、または興味がない状況で役立ちます。

ここから、独自のDockerセットアップにドライを適用して、ワークフローを合理化する方法を探ってみてください。 GitHub README で、dryの追加のキーバインディングを調べることができます。

モバイルバージョンを終了