1. HOME
  2. 開発・ブログ運営
  3. Docker
  4. Docker の仕組みを理解する(Docker クライアントと Docker サーバーと Docker API)
2016年07月31日
Docker 公式イメージで立ち上げた PHP-FPM コンテ ...
2016年07月06日
Jenkins コンテナの初期設定を自動化してみる
2016年07月29日
Docker for Mac/Windows で 「Canno ...
2016年07月29日
Docker for Mac のインストール
2016年07月30日
Docker の仕組みを理解する(Docker クライアントと ...
2016年07月09日
MySQL, WordPress, phpMyAdmin コン ...

Docker の仕組みを理解する(Docker クライアントと Docker サーバーと Docker API)

昨日 Docker for Mac/Windows の正式版(安定板)が公開されたことで Docker する人も増えるのでしょうか。

Docker のアーキテクチャ

Docker はクライアント・サーバー型のアーキテクチャで動作しています。

いわゆる「Docker をインストールする」とは「Docker エンジンをインストールする」ことを指しますが、Docker エンジンは主に、

1. Docker サーバー
2. Docker クライアント
3. Docker API

の 3つの要素で構成されています。

なので Docker をインストールすると、Docker サーバー、Docker クライアントがそれぞれインストールされます。(Docker API は Docker サーバー/クライアントそれぞれに内包されている)ちなみに Docker クライアント単体でインストールすることも可能です。(Docker サーバー単体は不可)

Docker がインストールされていれば、

$ docker version

コマンドで、インストールされている Docker サーバー、Docker クライアント、Docker API それぞれのバージョンが表示されます。

$ docker version Client: Version: 1.12.0 API version: 1.24 Go version: go1.6.3 Git commit: 8eab29e Built: Thu Jul 28 21:15:28 2016 OS/Arch: darwin/amd64 Server: Version: 1.12.0 API version: 1.24 Go version: go1.6.3 Git commit: 8eab29e Built: Thu Jul 28 21:15:28 2016 OS/Arch: linux/amd64

docker ps や docker run などのコマンドを発行するのが Docker クライアントの役割。そのコマンド要求を受けて コンテナを起動したり破棄したりするのが Docker サーバーです。

なお、Docker サーバーが稼働しているマシンを「Docker ホスト」と言い、ホストの OS を「ホスト OS」と言ったりします。


Docker クライアントと Docker サーバー間の接続

Docker for MacDocker for Windows がリリースされているので Docker は Mac や Windows でも完全に動作すると思われがちですが、正確に言うと、Docker サーバーは Linux のみでしか動きません。Docker クライアントは Mac/Windows/Linux 全てで動作します。

なので、Docker for Mac/Windows は内部的に Linux の仮想マシン(バーチャルマシン)を立ち上げて、その仮想マシン上で Docker サーバーを起動(デーモン化)します。

そして Mac/Windows 上の Docker クライアントからは、 Linux 仮想マシン上の Docker デーモンに TCP で接続し、Docker API(RESTful API) を通して通信しています。

ちなみに Docker for Mac/Windows 登場以前(Docker Toolbox まで)は、 Docker とは別に Virtualbox などの仮想マシンをインストールし、docker-machine create コマンドで手動で仮想マシンを立ち上げる必要がありました。

Docker for Mac/Windows は OS ネイティブな仮想化機能を利用しているため、Docker をインストールするだけで、仮想マシンの存在を意識することなく使えるようになっています。

Linux 版の Docker は、サーバー/クライアントともに Linux 上でそのまま動作するので、デフォルトでは TCP 接続よりも高速な UNIXドメインソケットを用いて通信しています。


Docker サーバーと Docker クライアントの物理的な場所

Docker サーバーと Docker クライアントは物理的にも論理的にも同一マシン上である必要はありません。Docker for Mac/Windos の Docker サーバーは、論理的な別マシン(仮想マシン)に存在することは先ほど説明した通りです。

物理的に離れた場所にある Docker サーバーへ接続することも可能です。

その場合には Docker for Mac/Windows と同様に TCP で接続し Docker API を通して通信しますが、Docker サーバー側の API バージョンとクライアント側の API バージョンが違ったりすると上手く通信できなかったりします。

また、TCP 接続する場合は TLS で暗号化することも可能です。

例えば、このブログはさくら VPS 上の Docker で動いていますが、Docker の操作をする場合、SSH で VPS に接続して docker コマンドを実行(UNIX ドメインソケット)することもあれば Mac から TCP で接続して docker コマンドを実行することもあります。


Docker API

Docker のクライアントと Docker サーバーは Docker API を通して通信するので Docker クライアント(docker コマンド)を使わなくても直接 Docker API を叩くことによって、Docker の操作が行えます。

例えば、

GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1

のように、コンテナ一覧を取得するリクエストを送ると JSON でレスポンスが帰ってきます。

Docker API の詳細は Docker ドキュメントを参照してください。

HTTP/1.1 200 OK Content-Type: application/json [ { “Id”: “8dfafdbc3a40”, “Names”:[“/boring_feynman”], “Image”: “ubuntu:latest”, “ImageID”: “d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82”,        〜 以下、省略 〜 ]

まとめ

Docker の各種ドキュメントを見ていると Docker エンジンを始め Docker レジストリDocker Swarm など、Docker ほにゃららな構成要素が多数出てきますが、その中でも基本的な、Docker エンジン、Docker サーバー(Docker デーモン)、Docker クライアント、Docker API についてまとめてみました。

でわでわ。








この記事にコメントする





Copyright © 2012 - 2014 MacBook Air とWordPressでこうなった All rights reserved
Powered by WordPress.