序章
dry は、Dockerコンテナーとそのイメージを操作するために構築されたシンプルですが広範なターミナルアプリケーションです。 ドライを使用すると、ルーチン Docker Engineコマンドの実行に伴う繰り返しがなくなり、ネイティブのDockerCLIのより視覚的な代替手段も提供されます。
dryには、コンテナーをすばやく開始および停止し、Dockerイメージを安全にまたは強制的に削除し、リアルタイムのコンテナープロセスを継続的に監視し、Dockerのinfo
、inspect
、history
、およびlog
コマンド。
公式のDockerEngineCLIを介して実行できるほとんどのコマンドは、同じ動作と結果で、ドライでより簡単に利用できます。 dryには、Docker Swarm機能が追加されており、マルチホストコンテナのセットアップを監視および管理するためのアウトレットを提供します。
このチュートリアルでは、dryをインストールし、その最も便利な機能のいくつかを探ります。
- Dockerコンテナー、イメージ、およびネットワークとの対話、
- Dockerコンテナーの監視、および
- オプションで、DockerSwarmノードおよびサービスと対話します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- Ubuntu 16.04の初期サーバーセットアップを使用してセットアップされた1つのUbuntu16.04サーバー(sudo非rootユーザーとファイアウォールを含む)。
- Ubuntu16.04にDockerをインストールして使用する方法のようにDockerがインストールされました。
- ドライテストを行うために、いくつかのアクティブなDockerコンテナがネットワーク化されています。 このチュートリアルの例として、Ubuntu 14.04でDockerComposeを使用してWordpressとPhpMyAdminをインストールする方法のWordPressとPHPMyAdminのセットアップ(ドキュメントルートのオプションの手順なし)を使用します。 または、独自の既存のコンテナ設定を使用することもできます。
- オプションで、ローカルコンピューター上のDockerマシンと、DockerSwarmを使用するDockerセットアップ。 これは、最後のステップでdryのSwarm機能を試す場合に必要です。 これを設定するには、 Ubuntu16.04でDockerマシンを使用してリモートDockerホストをプロビジョニングおよび管理する方法とUbuntu16.04でDockerSwarmとDigitalOceanを使用してDockerコンテナーのクラスターを作成する方法。
ステップ1—ドライインストール
まず、Dockerサーバーにdryをインストールする必要があります。 ドライバイナリの最新バージョンは、dryのGitHubリリースページで入手できます。
dry-linux-amd64
バイナリの最新バージョン、つまり発行時にv0.9-beta.3
をダウンロードします。
- wget https://github.com/moncho/dry/releases/download/v0.9-beta.3/dry-linux-amd64
次に、新しいバイナリファイルをdry-linux-amd64
から/usr/local/bin/dry
に移動して名前を変更します。
- sudo mv dry-linux-amd64 /usr/local/bin/dry
/usr/local/bin
は、サーバーにローカルなプログラムのバイナリを格納するために使用される標準の場所です。 ドライバイナリをそのディレクトリに移動すると、そのディレクトリがシェルの $ PATH環境変数に含まれているため、サーバー内のどこからでもコマンドラインでドライを呼び出すことができます。
バイナリの権限をchmod
で変更して、実行できるようにします。
- sudo chmod 755 /usr/local/bin/dry
-v
オプションを指定してプログラムを実行することにより、dry
にアクセスでき、正しく機能していることをテストできます。
- dry -v
これにより、バージョン番号とビルドの詳細が返されます。
Version Details Outputdry version 0.9-beta.2, build d4d7a789
ドライが設定されたので、使ってみましょう。
ステップ2—Dockerコンテナとの対話
乾いた状態で実行して、ターミナルにダッシュボードを表示します。
- 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
コンテナを選択すると、画面の中央下にも選択可能なオプションの新しいリストが表示されます。
-
Fetch logs
。これは、DockerEngineコマンドdockerlogsと同等です。 これは、コンテナ内のエラーのデバッグとトラブルシューティングに役立ちます。 -
Kill container
。これは、コンテナーが応答せず、正常に終了しない場合に使用できます。 -
Remove container
、不要なコンテナをきれいに取り除くために使用できます。
警告:Kill container
およびRemove Container
オプションは即座に発行され、確認プロンプトがないため、注意してください。
-
Inspect container
は、 docker containerinspectと同等です。 -
Restart
。コンテナを停止して再起動します。 DockerEngineコマンドを入力して再起動またはコンテナーのステータスを照会するよりもはるかに高速です。 -
Show image history
。コンテナのイメージを構築するために使用されたコマンドが一覧表示されます。 これらの「レイヤー」は、イメージビルドプロセス中に生成され、Dockerfileで提供されるコマンド/アクションの結果です。 このオプションを使用すると、ベースDockerイメージを使用してコンテナーがどの程度正確に生成されたかを確認できます。 -
Stats + Top
には、CPU使用率、メモリ消費量、インバウンドおよびアウトバウンドネットワークトラフィック、ファイルシステム操作、合計プロセスID、合計コンテナ稼働時間などの情報が含まれます。 また、topの出力と機能的に同じプロセスリストも含まれています。 -
Stop
、コンテナを停止します。F2
を使用して、Containers
ビューのコンテナーを切り替えて、currently stopped and active
を含めることができます。また、Restart
オプションを選択した後、停止したコンテナーを再起動できます。 。
ESC
キーを押して、ダッシュボードのルートContainers
セクションに戻ります。 ここから、Images
セクションを見ていきます。
ステップ3—Dockerイメージとの対話
Containers
セクションから、2
を押して、ドライのImages
セクションにアクセスします。
このセクションでは、 dockerimageinspectコマンドに簡単にアクセスできます。 dryには、ナビゲーションバーに表示される便利なキーボードショートカットもいくつかあります。
CTRL+D
Remove Dangling
の場合、「ダングリングボリューム」とは、どのコンテナーからも参照されなくなったために冗長になっている他のコンテナーボリュームを指します。 通常、コマンドラインのDockerでは、この操作にはdocker volume rm
コマンドとdangling=true
フラグ、およびターゲットデータボリュームが含まれます。Remove
のCTRL+E
は、 docker rmi と同等であり、そのイメージから作成されたコンテナーがまだアクティブで実行されていない限り、イメージを削除できます。CTRL+F
forForce Remove
。これにより、docker rmi --force
を使用しているかのように、強調表示された画像を強制的に削除できます。History
のI
は、Containers
セクションのShow Image History
と同じデータを表示します。
これまで、ドライのコンテナと画像のセクションを見てきました。 探索する最後のセクションはネットワークです。
ステップ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
を使用して、ネットワーク出力を閉じます。 ドライのContainers
、Images
、およびNetworks
セクションを確認したので、ドライの監視機能に移りましょう。
ステップ5—Dockerコンテナの監視
M
キーを押すと、現在のサーバー/ホストで実行中のすべてのコンテナーの概要がすばやく要約されます。 この画面には、Containers
、Images
、Networks
など、ドライのルートセクションからアクセスできます。
この情報の一部はプログラムの他の場所(Stats + Top
コンテナオプション内など)に一覧表示されますが、このビューはすべてのコンテナに関する情報の中央の場所を提供し、スタック全体を監視できます。 これは、大量のコンテナを管理する場合に役立ちます。
Q
を押してダッシュボードを終了します。 ここから、DockerSwarmを使用してドライセットアップを行います。
手順6— Docker Swarm Cluster Managerにdryをインストールする(オプション)
ローカルコンピューターから、ユーザーdocker-machine
を使用して、指定したクラスターマネージャーノードにSSHで接続します。 Docker Swarmの前提条件チュートリアルでは、これはnode-1
として設定されていました。
- docker-machine ssh node-1
ドライをインストールする別の方法を示すために、curl
公式インストールスクリプトを実行してください。 curl ... | sh
パターンを避けたい場合は、手順1のように乾式でインストールできます。
- curl -sSf https://moncho.github.io/dry/dryup.sh | sh
インストールスクリプトは、ドライバイナリを/usr/local/bin
に自動的に移動します。
Outputdryup: 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で行ったように、バイナリの権限を更新します。
- sudo chmod 755 /usr/local/bin/dry
さあ、乾かしてみてください。
- dry
最初のContainers
セクションの右上に、前の手順で空白だったSwarm
およびNode role
ステータス行が表示されるようになりました。
OutputSwarm: 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
プロンプトが表示されます。
OutputChanging node availability, please type one of ('active'|'pause'|'drain')
drain
と入力し、ENTER
で確認します。
ドレインオプションは、ノードがSwarmクラスターマネージャーから新しい指示を受信するのを防ぎ、通常、計画されたミアンテナンスに使用されます。 ドレインを使用するということは、ノードマネージャが、ドレインされたノードの一時的なダウンタイムを補正するアクティブな可用性に設定された別のノードでレプリカを起動することも意味します。
drain
コマンドを送信すると、左上のステータスメッセージでアクションが確認されます。
左上に表示されるステータスメッセージに、このアクションの確認が表示されます。 この変更は、AVAILABILITY
列にも反映されます。
OutputNode iujfrchorop9mzsjswrclzcmb availability is now drain
AVAILABILITY
列に変更が反映されていることにも気付くでしょう。
node-2
を元に戻すには、もう一度強調表示し、CTRL+A
を押して、Set Availability
プロンプトを元に戻します。 今回は、active
と入力し、ENTER
を押します。
このアクションの確認メッセージも表示されます。
OutputDocker 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
と入力します。 これにより、スケーリングプロンプトが表示されます。
OutputScale service. Number of replicas?
コンテキストでは、このサービスのスケーリングは、Webトラフィックの増加による追加リソースの需要を満たすのに役立ちます。 プロンプトに8
と入力し、ENTER
を押して、レプリカの数を8に増やしましょう。
この確認メッセージを確認して、アクションを確認してください。
OutputDocker daemon: update v6gbc1ms0pi scaled to 8 replicas
これで、サービスのServices
ビューリスト8/8
レプリカを確認できます。
サービスを完全に削除する場合は、サービスを強調表示してCTRL+R
を押し、サービス削除プロンプトを表示します。
OutputAbout 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の追加のキーバインディングを調べることができます。