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 に含まれるようになったため、今では個別のコンポーネントとしては利用されなくなりつつあります。