Docker Universal Control Planeとは?

Docker Universal Control PlaneはDocker社のエコシステムのGUIによる管理を実現させるDocker社純正のツールである。昨年まではプロジェクトネームOrcaの名で開発が進められてきたが、DockerCon EU2015でDocker Universal Control Planeに(以下UCP)統合される旨が告げられた。

UCPの哲学は開発チームと運用チームがコンテナベースのアプリケーションの開発、デプロイ、運用を本番環境で可能にさせることである。Dockcer Swarmによるコンテナのクラスタリングとオーケストレーションを始めとして、Docker Engine, libnetwork, volume, netowrk plugin, Registry, Composeが既にUCPから操作できる。また、コンテナのScale upもボタンを1つで実施できる。これまで開発されてきたDockerエコシステムをUCPから簡単に操作可能になったのだ。

2015年12月11日現在UCPはBetaリリースされている[1]

なぜUCPを使うのか?

DockerのAPIを叩いてコンテナの管理をするGUIはこれまでにも幾つかある。その中でも、UCPを使って良いなーと思ったのは以下の点。

  • 説明不要な直感的なUIを持っている
  • Dockerエコシステムのための統合GUIなのでDockerシステムと相性が良い
  • プロダクション環境での利用を意識した設計

Dockerのエコシステムと相性が良いのは言わずもがなかな。Docker社内で開発の連携が出来る分ツール間の親和性や新ツール追従の開発スピードは他を圧倒するだろう。

UIも秀逸だ。VMWare,CloudStack,OpenStackと様々な仮想化環境のラッパーとなるソフトウェアとそのGUIを触ってきたが、その中でも一番シンプルでわかりやすい。

また、HA構成による可用性やLDAPやActiveDirectoryとの連携によるアカウント管理、オンプレミスでのデプロイが可能なことなど本番環境での運用に対する配慮が初期から垣間見られる。開発も運用も大事にしたいという意識が感じられて本当に素晴らしい。

UCPを使ってみる

実際にUCPを使ってどんなことが出来るか確認する。UCPにアクセスするとログイン画面が出る。

01_sign_in

ログインするとUCPがコントロールしているシステム全体のサマリーが表示される。

02_overview

メニューを開くとDashboard、Applications、Nodes、Network、Images、Account、Settingの項がある。

03_side_menu

Applications以降の項について何が出来るか確認する。

Containers(Engine,volume,network)を使ってみる

Containersではコンテナの状態確認や操作(デプロイ、起動、停止、スケールアップ)ができる。

04_no_container

試しに1つredisのコンテナを立ててみる。

05_container_setting

コンテナ名やコンテナ作成に使うImageを指定したが、他にもContainer config, Environment, Network, Volumes, Constraintsが設定でき、Dockerコマンド経由で出来ることは大体出来る印象。

Docker Registryにredisのイメージが無いので初回はDocker HubからImageの取得が行われる。Imageの取得が終わると数秒でredisコンテナが起動する。

06_created_redis_container

起動後はコンテナの詳細確認出来たり、

07_redis_container_details

コンテナのログをみたり、コンソールでコンテナの操作をしたりできる。redisのコンテナなのでいつものredisのログが確認できる。

08_redis_container_log

また、Scaleボタンをクリックするとコンテナのスケールアップが実行される。但し、スケールアップしたコンテナの名前はランダムで決定されてしまう。

Images(Registry)を使ってみる

Imagesでは管理しているImage一覧が表示される。先ほどDocker Hubから取得したredisのImageも登録されている。

09_images

Nodes(Swarm)を使ってみる

Nodesを開くとクラスタを形成しているノード確認できる。今回は単一ノードで検証をしているので複数ノードでクラスタを形成した時の動作は後日追記する。

11_ucp_nodes

Network(libnetwork)を使ってみる

NetworkではDockerが管理しているネットワーク情報が確認できる。

10_networks

ネットワークも作れる。

10_create_networks

Applications(Compose)を使ってみる

Applicationsではdocker-compose upで起動するコンテナ群を管理出来る。ただし、初回のdocker-compose upに相当する操作はUCPからは出来ないようなので以下のdocker-compose.mlを使って起動した。

rproxy:
  image: jwilder/nginx-proxy:latest
  ports:
    - "80:80"
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
db:
  image: postgres:9.5
  environment:
    - POSTGRES_PASSWORD=secret
    - POSTGRES_USER=redmine
redmine:
  image: redmine:2.6.8
  links:
    - db
  environment:
    - VIRTUAL_HOST=redmine.example.com
  volumes:
    - /srv/docker/redmine/redmine:/home/redmine/data

UCPにアプリケーションが1つ増える。また、詳細を確認するとアプリケーションを構成するコンテナが現れ、それぞれを操作出来る。

12_composed_containers

一度アプリケーションを作成すると、UCPからそれらの起動、停止が可能になる。

便利!

終わりに

検証項目とか作ってテストしたわけじゃないので直感的にだが、Beta版といえ完成度は高い印象をうけた。また、冒頭でも述べたがUIがかなりシンプルでやりたい操作が自然と出来る。OpenStackのHorizonと比べてシンプルでいい。あれはなんかごちゃっとしてるんだよね。この辺はクラウドサービスの開発、運用をDotCloud時代からしているので、ノウハウが溜まっているからだろうか、流石である。とはいえ、マルチテナンシーのサポートなど欲しい機能はまだある。その辺りは、今後に期待したい。これから、UCPも使ってDockerのエコシステムを中心とした本番環境と開発環境の運用をしていこうと思う。

参考

公式

[1] UCPは現在Betaテスト中でありますが、本ブログに記載されている内容、写真等につきましてはDocker社の方から掲載の許可を頂いております。 This is an article that Docker,Inc. accepted to share UCP info. Thank Michael, Chris and Betty :)