Docker の構成

Docker は以下の様なコンポーネントから構成されています。

  • Docker Client
  • Docker Server
  • イメージ
  • コンテナ
  • レジストリ

以下ではこれらのコンポーネントに関してそれぞれ取り扱います。

Docker Client と Docker Server

Docker は Client/Server アーキテクチャーで動いています。 Docker の機能自体はサーバー側で実現されていて、ユーザーはそのサーバーに対して Client で指示を出して利用するという仕組みです。

Client の種類にはいくつかありますが、主に利用されるのはコマンドラインとなりますが、他には REST API などもあります。 Client とサーバーの接続に関してはローカル(同じマシンでクライアントとサーバーの両方が動く)も可能ですし、リモートのサーバーをローカルマシンのクライアントで操作するといった使い方も可能です。

イメージ

Docker のイメージはコンテナの雛形と言える存在です。コンテナはこのイメージに沿って作成されます。 ただ、Docker のイメージは単なる雛形というだけではなく、「設計図(Blue Print)」としての意味合いも持っています。

Docker のイメージは「今現在の状態」を表現しているというよりは「ベースとなるイメージに対してAをしてBをしてCをした」というような、状態の遷移履歴をもつデータだと言えます。

今現在の状態しか保持しない場合、「どのような流れで今に至ったか」を管理者が把握している必要がありますが、Dockerのイメージの場合はその中に「イメージが作られた履歴」のようなものが含まれています。 そのため、状態の再現などを容易に行うことが可能です。

コンテナ

コンテナはイメージ(雛形)から作られる実体のようなものです。プログラミングに例えると、イメージが型でコンテナがインスタンスだと思ってもらえればいいと思います。

コンテナはその内部でワーカーとなるプロセスを走らせます。コンテナに直接作業をさせたり、コンテナ間で連携させることでサービスを作成します。

レジストリ

Docker のイメージは管理される必要があります。レジストリはそれを行うサービスです。 Git Hub はソースコードを管理シェアするサービスですが、そのようなサービスのことを Docker はレジストリと呼んでいます。

Docker も Git Hub と同様に「Docker Hub」と呼ばれる共有のレジストリを持っています。 その一方、イメージを共有したくないユーザが自分でレジストリをたてて、特定のユーザ間だけでイメージを管理することも可能です。