前回は、従来の仮想化とコンテナという観点でDockerについて学んできました。今回は、Dockerのアーキテクチャと用語などについてまとめていこうと思います。

Dockerのアーキテクチャについて

Dockerは、ソフトウェア開発者がコンテナを利用して、生産性を改善できるように、コンテナに対して、大きく分けて3つの側面で機能を提供します。

  1. 生成する
  2. 移動する
  3. 実行する

Dockerでは、この3つの側面での機能を提供するために、次に示すようなクライアント、デーモン、レジストリという構成で成り立っています。

Dockerアーキテクチャの概要図

アーキテクチャ

Dockerは、クライアント・サーバモデルのアーキテクチャを採用しています。クライアント、サーバともに同一マシン上で実行することが出来ます。それぞれの構成に関して、掘り下げて見ていきましょう。

Docker Deamon

Dockerデーモンは、クライアントからの要求に応じて、イメージ、コンテナなどを操作します。ネットワーク越しのリクエストでも受け取ることが出来ます。また、デーモンと呼ばれる他にエンジンと呼ばれることがあります。

Docker クライアント

利用者がDockerの管理やコンテナ・イメージの操作に利用します。dockerデーモンのクライアントは、dockerコマンドであり、コマンドライン(CLI)向けのインタフェースを提供しています。dockerコマンドは、Docker APIを通して、Dockerデーモンに必要な操作要求を行い、機能を利用します。代表的なコマンドは、

  • docker pull ・・・レジストリのイメージからローカルリポジトリへダウンロードする。
  • docker build ・・・ イメージを生成する。
  • docker run ・・・イメージからコンテナを生成し、実行する。

コンテナ、イメージは今後も良く利用する言葉ですが、混乱しやすいところでもあります。

Docker イメージ

Dockerコンテナを生成するための基盤となるテンプレートです。このテンプレートは、読み取り専用です。コンテナ実行時に、イメージからコンテナへ変換し、アプリケーションなどを実行します。パブリックなりDockerリポジトリとしては、Docker Hubや各パブリッククラウドベンダーなどが提供するものもあります。

Dockerコンテナ

コンテナは、アプリケーションの実行に必要な全てを持つ、Dockerイメージから構築された一つのプラットフォームです。前回の記事で紹介したように、Linuxのネーム空間、cgroup等をうまく利用して、一つの隔離したプロセスとして実行していることからプロセスと呼ばれることもあります。

Dockerレジストリ

コンテナのイメージを保管するための場所です。Docker自身は、デフォルトではDockerHubにあるイメージを探すような仕組みになっています。レジストリには、パブリックレジストリやプライベートレジストリなども設定することで利用でき、独自に生成したイメージをアップロードやダウンロードが可能です。

今回は、Dockerのアーキテクチャとその中で利用されている用語についてまとめてみました。次回以降では、Dockerを使えるような環境の構築、実際に触ってみようと思います。

お疲れさまでした。