【2020年4月最新】Docker の全体像についてまとめてみた。

# Docker を構成するコンポーネントについて
私含めDockerの初学者がDockerについて独学で学習しようとした際に、用語で混乱することがあったので、簡単にまとめてみました。
Docker V19.03 (2020年4月現在最新版)の情報を基に作成しました。
各コンポーネントの説明のため、コンポーネントの詳細には触れていませんが、全体を把握するに際にお役に立てばと思っています。


# コアとなるコンポーネント
Dockerを構成するコンポーネントは下記2つです。

### Docker Engine

Docker EngineがDockerと言われているものの実態。
Docker EngineはLinux上で1つのプロセスとして動作します。
OSがLinuxであればDocker EngineさえインストールすればDockerを利用することが可能です。
ただ、Linux 以外のOSの場合は、Linux環境を構築するためにDockerが提供する下記のコンポーネントを別途インストールする必要があります。詳細は後述します。
- Docker Desktop for Windows
- Docker Desktop for Mac
- Docker Toolbox（Desktopの旧バージョン）

### Docker Registry

Dockerでは、任意のアプリケーションを実行して利用しますが、その実行されたアプリケーションのことをContainerと呼び、Containerを実行するためのテンプレートのようのものがあり、それをimageと呼んでいます。
そのimageを格納・共有する場所がDocker Registryとなります。

Docker Registryとして、下記を利用することができます。

- Dokcer Hub（Docker 公式のレジストリサービス）
- クラウドベンダー（AWS,GCP,Azure,OCI）が提供しているレジストリービス
- 自前で作成するプライベートなレジストリサービス

面白いのがDocker HubにはDocker Registryのimageがあるので、そのimageを利用してDocker上にDocker RegistryのContainerを作成し、プライベートなレジストリ構築することが可能です。

# Linux OS 以外でDockerを利用する場合に必要となるコンポーネント
Linux以外の環境で利用する際は、下記に記載するWindows / Mac 用のDockerDesktopを自身の環境に合わせてインストールしてしてください。
### Docker Desktop for Windows

Docker Desktop for Windowsは、Windows環境でDockerを利用する場合に、インストールする必要のあるコンポーネントです。

インストールするにあたっては、下記システム要件を満たす必要があります。

- Windows 10 64bit: Pro, Enterprise or Education (Build 15063 or later).
- メモリ 4GB
- Hyper-VとContainers機能の有効化

インストーラーに含まれるものは下記です。

- Docker Engine
- Docker CLI client
- Docker Compose
- Notary
- Kubernetes
- Credential Helper

公式ドキュメントには上記記載があるのですが、私がわからなくなったのはここでした。Docker EngineってLinux上で動くものなのに、Linux環境なくいて動くのかということです。

実際にインストールしてみて判明しましたが、Linux環境がないと動きません。

WindowsでDockerを利用するためには、下記2つのうちのいずれかのLinux環境を利用します。

#### 1. Hyper-V上のLinus仮想マシンを利用する

Docker Desktop for WindowsをインストールするとHyper-V上に"DockerDesktopVM"という仮想マシンが作成され、その仮想マシンがLinux環境を提供してくれます。

こちらの方法に関しては、Docker Desktop for Windowsをインストールさえすれば自動で利用できるようになるので、インストール時に特に意識しなくても大丈夫です。

#### 2. Windows Subsystem for Linux2（WSL2）を利用する

2020年4月現在、edge（エッジ）で実装されている機能です。（stable（安定版）には実装されていません。）

WSL2はWindowsの機能でLinuxカーネルを実装しているもので、2020年4月の執筆時点では一般提供されてなくWindows10のInsider Previewで提供されいています。

なので、2020年4月の執筆時点は、WSL2もDocker Desktop for Windowsも安定板としては提供されていないものを利用する事となります。

WSL2でDocker Desktop for Windowsを利用できる様になると何が嬉しいかというと、indows10 Home で Docker Desktop for Windowsを利用できるようになるのです。

Hyper-V上のLinuxを利用する場合は、Windows10 Pro以上でないと利用できなかったので、あきらめていたユーザさんも多いかと思いますが、そういったユーザさんにはうれしい機能かと思います。

WSL2の正式版がバージョン2004で提供される予定で、CEの最新版は2020年6月に提供される予定なので、2020年6月以降には、正式な機能としてWSL2で Docker Desktop for Windowsを利用できるようになるのではと思っています。

### Docker Desktop for Mac

MacもWindowsと同様、Linuxではないので、Dockerを利用する場合にインストールする必要のあるコンポーネントとなります。

インストールするにあたっては、下記システム要件を満たす必要があります。

- Macのバージョンは最新の2つ前まで
- メモリ 4GB
- ETPを含んだMMTがサポートされているIntelのハードウェア

インストーラーに含まれるものは下記です。(Windows版と同じです。)

- Docker Engine
- Docker CLI client
- Docker Compose
- Notary
- Kubernetes
- Credential Helper

Windowsの場合はHyper-V上の仮想マシンかWSL2のLinux環境を利用していましたが、Docker Desktop for Macの場合は、HyperKit上に作成されるAlphine Linuxベースの仮想マシンを利用し動作します。

# Dockerの利便性を向上させるコンポーネント

### Docker Compose

Docker Composeは、Docker Engine上で実行されるContainerを複数定義し、実行するためのコンポーネントです。

Docker Composeを利用してContainerを実行する際は、 Container 毎に定義可能なサービス（services） 、 ネットワーク（networks） 、 ボリューム（volumes） をdocker-compose.ymlというYAML形式の定義ファイルに記載して、記載のある複数のContainerをまとめて実行・停止することが可能です。

もう少しかみ砕いて説明すると、Docker Engineは複数のContainerを実行する場合は手間がかかるけど、Docker Composeを利用する事によっては、複数のContainerの実行を簡単に行えるようになります。

Docker Composeは Docker Engineには含まれていないため、Docker Engineとは別にインストールする必要があります。ただ、Docker Desktopのインストーラには含まれているので、Docker Desktopを利用している方はデフォルトで利用可能です。

# レガシーなコンポーネント

レガシーなコンポーネントについて紹介しますが、Docker としても今後開発を進めていくコンポーネントではなくなっているので利用する事はおすすめしませんが、ネットで調べるとどうしても昔の情報が出てきますので、その意味合いも込めて、レガシーコンポーネントについても紹介します。

### Docker Toolbox

Docker Desktopがリリースされる前に、WindowsやMacでDockerを利用するために提供されていたコンポーネントです。

インストーラーに含まれるものは下記です。

- Docker Machine
- Docker Engine
- Docker Compose
- Kitematic
- Oracle VirtualBox

Docker Desktopの方が利便性がいいため、今となってはDesktopのシステム要件を満たさない場合に利用するコンポーネントという位置づけです。

Docker Desktopと違って、Docker Toolboxの場合は、Docker Toolboxをインストールした端末上でネイティブアプリとしてDockerを利用できず、VirtulBox上のLinux環境にログインしてDockerを利用するというのがデメリットとなります。

### Docker Machine

Docker Desktopがリリースされる前にWindowsやMacでDockerを利用する場合は、このDocker Desktopが必須のコンポーネントでした。ただ、Docker Desktopがリリースされたことによって、Linux以外のOSでもDockerがネイティプアプリケーションとして実行可能となったため、今では利用されなくなりつつあるコンポーネントとなります。

### Docker Swarm(standalone)

Docker 1.12 より古いバージョンので利用されていたstandalone のコンポーネントです。
1.12 以上のバージョンであれば、Swarm modeという機能がDocker Engine に含まれるようになったため、今では個別のコンポーネントとしては利用されなくなりつつあります。