tands_bの日記

技術メモ。大したことは書きません

【Docker】基礎

Dockerとは

 Dockerとは、非常に軽量なアプリケーション実行環境で、1台のマシン上で複数のアプリケーション実行環境を用意することができるようになる。VMwareなどの仮想化ソフトウェアのように独立した実行環境を構築するのではなく、Linuxのコンテナ機能を用いて他のプロセスとは隔離することで実行環境を用意するため、オーバヘッドが少なくなるなどメリットを享受できる。

[参考URL]
超入門Docker:第1回

Dockerアーキテクチャ

ホストマシン上の構成

f:id:tands_b:20171008190028p:plain
 Dockerのホストマシン上での構成は上図のようになっており、、ホストのカーネルは実行されるコンテナと共有され、ライブラリはアプリケーション間で共有される。コンテナ内で動作しているプロセスはホスト上で直接動作しているプロセスと同等なため、コンテナエンジンからの起動・停止にオーバヘッドが無い。

コンポーネントの構成

 Dockerはクライアント・サーバ型のアーキテクチャになっている。DockerクライアントがDockerデーモンと通信し、Dockerデーモンから各層に振り分けている。以下のコンポーネントから構成される。

コンポーネント 概要
クライアント ユーザからの命令を元にDockerデーモンと通信を行う。
デーモン ホストマシン上で動作し、Dockerクラインアントからの要求を元にコンテナ/イメージ/レジストリに処理を要求する。
イメージ test
コンテナ Dockerにおける実行コンポーネント。Dockerイメージから構成され、実行/開始/停止/移動/削除できる。
レジストリ Dockerイメージを保管するもの。イメージのアップロードやダウンロードが可能。

[参考URL]
アーキテクチャの理解 (公式)

VMとの比較

コンテナを使用するメリット

 VMと比較した場合のコンテナのメリットは大きく3つある。

  • ホストOSとリソースを共有するため効率的。
  • 開発者マシンへの依存や環境構築コストを排除できる。
  • 軽量なため数十のコンテナを同時実行することが可能で、分散システムをエミュレーションできる。

支援技術

 Dockerに含まれている支援技術は以下の通り。(2017年10月時点)

技術 概要
Swarm クラスタリングソリューション。複数のDockerホストをまとめ、それらを統合されたリソースとして使用できる。
Compose 複数のDockerコンテナから合成されるアプリケーションの構築と実行のためのツール。主に試験や開発で使用される。
Kitematic Dockerコンテナの実行管理のためのGUI
Docker Trusted Registry オンプレミスでDockerイメージを保存管理するソリューション。ローカル版のDocker Hub。