Dockerの管理・監視ツール(1)
ITシステムが地方に散在する場合、Dockerに精通した管理者が不在であることも少なくありません。Dockerに詳しくない人でも、効率よく、かつ、ミスなく管理するためには、GUI管理・監視ツールの導入が必要になります。特に、近年では、クラウド基盤の導入が進み、IT部門だけでなく、ユーザー部門などが、セルフサービスポータルのダッシュボードのWebユーザーインタフェースなどを使って、みずからサービスを利用することも増えてきました。現在は、OpenStackなどに代表されるクラウド基盤ソフトウェアは、Linuxのハイパーバイザー型仮想化技術であるKVMをベースとした仮想マシン(インスタンス)の管理が中心ですが、Dockerにおいても、クラウド基盤に見られるセルフサービスポータルのような、直観的で分かりやすい管理画面が求められています。2015年9月中旬現在、Dockerコンテナを簡単なGUIで操作し、管理・監視するためのツールがいくつもリリースされています。本稿では、そのなかでも、Dockerコンテナの管理ツールとして有名なものをいくつか取り上げ、具体的なインストール手順や簡単な使用法を紹介します。
非常にシンプルな「DockerUI」
DockerUIは、非常にシンプルなDockerのGUI管理ツールです。非常に簡単にDockerコンテナを管理することができます。ただし、2015年9月現時点で、DockerUIには、標準で暗号化通信やユーザー認証の機能がありません。ですので、標準のDockerUIでは、マルチテナントや複数の部署にまたがる用途には向いていませんが、部署内で、Dockerに不慣れた管理者が部内で簡易的に利用する場合に適しているでしょう。また、非常に直観的なユーザーインタフェースになっていますので、操作に迷うことなくDockerイメージやコンテナを管理することができます。
[補足]
DockerUIにおいて、ユーザー認証や暗号化通信を行うには、Apache Webサービスのmod_proxyやmod_sslを使い、DockerUIをビルドする必要があります。
https://github.com/crosbymichael/dockerui/wiki/DockerUI-with-TLS-encryption-and-client-authentication
Docker UIのインストール
DockerUIは、Dockerイメージが用意されているため、Docker環境があれば、簡単に利用することができます。以下では、すでにDocker環境がインストールされているCentOS 7.1上にDockerUIをインストールします。
# docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui
DockerUIが入ったDockerコンテナが起動しているかを確認します。
# docker ps -a CONTAINER ID IMAGE COMMAND ... STATUS PORTS NAMES 7d21a4b2f496 dockerui/dockerui "/dockerui" ... Up 15 seconds 0.0.0.0:9000->9000/tcp focused_mcclintock
これで、DockerUIが利用可能になりました。
DockerUIによる管理
DockerUIにアクセスするには、WebブラウザでDockerUIのDockerコンテナが稼働するホストOSのIPアドレス、または、FQDNに9000番ポートを指定します。FQDNで指定する場合は、/etc/hostsあるいは、DNSサーバーによる名前解決が必要です。
http://DockerUIのDockerコンテナが稼働するホストOSのFQDN:9000
DockerUIのWeb管理画面にアクセスすると、ユーザー認証もなく管理画面が表示されます。現在稼働しているコンテナなどの情報がダッシュボードに表示されています。
DockerUIの管理画面の「Containers」をクリックすると、現在のコンテナ一覧が表示されます。
「Images」をクリックすると、ホストOSに現在登録済みのDockerイメージの一覧が表示されます。
今回は、ホストOS上のコマンドラインから、以下のコマンドを使ってCentOS 5.11のDockerイメージを入手します。
# docker pull centos:centos5.11
DockerUIのDockerイメージの管理画面で、Dockerイメージのcentos:centos5.11の「Id」欄に表示されているコンテナIDをクリックします。
すると、Dockerイメージに関する概要が表示されます。Dockerイメージのサイズ、ビルド年月日、ビルド環境などが表示されます。このDockerイメージからコンテナを起動するには、「Create」をクリックします。
コンテナ名、ホスト名、割り当てるメモリ容量などを入力することができます。今回は、CentOS 5.11を起動し、dateコマンドを実行し、日付を出力するコンテナを起動してみます。Docker起動時にdateコマンドを実行するには、「ENTRYPOINT:」の欄に「date」を入力します。今回は、コンテナ名をtest0001とします。必要な項目を入力したら、ウィンドウの下部にある「Create」をクリックします。
これで、コンテナtest0001が生成されました。生成されたコンテナtest0001に関する各種情報が表示されます。
dateコマンドの結果が出力されたかどうかを確認するには、同ページ内の下部にある「stdout/stderr」をクリックします。すると、標準出力と標準エラー出力の結果が表示される画面になります。今回は、dateコマンドを実行するDockerコンテナですので、STDOUTの欄に時刻が表示されています。
DockerUIではコンテナの起動、停止、再起動、kill、一時停止、一時停止の解除、削除などの操作も可能です。
Docker Swarmによるクラスター環境を見据えた管理ツール「Shipyard」
Shipyardは、Dockerの管理ツールとしても非常に有名で、Dockerイメージ、Dockerコンテナの管理はもちろん、DockerUIが提供していないユーザー認証やDockerコンテナへのコンソール接続などの機能があります。また、最新のShipyardでは、Docker Swarmがビルトインされており、Swarmクラスタにおける利用を念頭に開発が続いています。ただし、Shipyardは、改良が頻繁に行われており、メインバージョンが変わると、構築手順や設定の方法が大きく異なるため、Shipyard自体をバージョンアップする際には、注意が必要です。
Shipyardのインストール
以下では、Shipyardの最新版のインストール方法と基本的な管理方法を紹介します。Shipyardも、DockerUIと同様にDockerイメージが用意されているため、Docker環境があれば、簡単に利用することができます。以下は、すでにDocker環境がインストールされているCentOS 7.1上にShipyardをインストールする手順です。プロキシーサーバーを経由してインターネットに接続する場合は、プロキシーサーバーのための環境変数を事前に設定しておく必要があります。また、今回は、ファイヤウォールを無効にしておきます。
# export http_proxy=http://プロキシーサーバーのFQDN:8080 # export https_proxy=http://プロキシーサーバーのFQDN:8080 # systemctl stop firewalld
Shipyardプロジェクトが提供するDockerイメージを入手します。
# curl -s https://shipyard-project.com/deploy | bash -s ... ... Waiting for Shipyard on 16.147.201.22:8080 ............ Shipyard available at http://16.147.201.22:8080 Username][admin Password][shipyard
[注意]
上記のcurlコマンドによるインストール手順の最終段階では、Shipyardへの接続テストが自動的に行われます。もし接続テストが終了しない場合は、事前にホストOSのファイヤウォールの設定に不備がある可能性があります。具体的には、8080番ポート、2375番ポートを公開する必要があります。
正常にインストールが終了すると、以下のDockerコンテナが起動しているはずです。
# docker ps -a CONTAINER ID IMAGE ... COMMAND ... PORTS NAMES dc97b9563a1a shipyard/shipyard ... "/bin/controller serv" ... 0.0.0.0:8080->8080/tcp shipyard-controller 2e89ac8e3953 swarm:latest "/swarm m --host tcp:" ... 2375/tcp shipyard-swarm 11eb4b793a06 ehazlett/docker-proxy ... "/usr/local/bin/run" ... 2375/tcp shipyard-proxy d225f3755096 alpine "sh" ... shipyard-certs 41ffe0e5e185 rethinkdb "rethinkdb --bind all" ... 8080/tcp, 28015/tcp, 29015/tcp shipyard-rethinkdb
以上で、Shipyardのインストールが完了しました。
Shipyardによる管理
Shipyardにアクセスするには、WebブラウザでShipyardのDockerコンテナが稼働するホストOSのIPアドレス、または、FQDNに8080番ポートを指定します。FQDNで指定する場合は、/etc/hostsあるは、DNSサーバーによる名前解決が必要です。
http://ShipyardのDockerコンテナが稼働するホストOSのFQDN:8080
ShipyardのWeb管理画面にアクセスすると、ログイン画面が表示されます。ユーザー名は、admin、パスワードは、shipyardでログインできます。
Shipyardにログインすると、現在稼働しているDockerコンテナなどの情報が一覧表示されます。
以下では、Shipyardの管理GUIを使って、Dockerコンテナの起動、そして、コンソールへの接続を行いDockerコンテナのOSのバージョンを確認し、さらにコンテナの負荷状況を確認するまでの手順を紹介します。まず、事前にShipyardが管理するためのDockerイメージを入手します。今回は、ShipyardのDockerコンテナが稼働するホストOSに、CentOS 6.7のDockerイメージを事前にpullしておきます。
# docker pull centos:centos6.7
Shipyardの管理画面上部の「IMAGES」をクリックすると、Shipyardの管理下に置かれているDockerイメージ一覧が表示されますので、先程入手したCentOS 6.7のDockerイメージが登録されているかを確認します。
次に、Shipyardの管理画面上部の「CONTAINERS」をクリックし、コンテナ一覧を表示し、「Deploy Container」をクリックします。今回は、「Image Name」に「centos:centos6.7」、コマンドに「/bin/bash」、ホスト名に「test0001」、ドメイン名に「jpn.linux.hpe.com」、コンテナ名に「test0001」を入力し、画面下部の「Deploy」をクリックします。
再び、Shipyardの管理画面で「CONTAINERS」をクリックし、コンテナ一覧を表示します。画面右の「Actions」から、スパナのアイコンをクリックし、「Console」をクリックします。
画面上の「Run」をクリックすると、コンテナtest0001のコンソールが表示されます。コンソールで、キーボードから「cat /etc/redhat-release」を入力し、OSのバージョンがCentOS 6.7かどうかを確認してください。
Shipyardの「CONTAINERS」からコンテナtest0001の画面右の「Actions」にある虫眼鏡のアイコンをクリックすると、コンテナtest0001に関する情報が得られます。
「Status」をクリックすると、CPU、メモリ、ネットワークの負荷状況をリアルタイムで監視することができます。