Docker を料理で例える
Docker を一度で理解できなかった自分が、こう考えたら全体像が理解できたという自分なりの例えと備忘録
Docker Image ≒ 料理レシピ
Docker イメージは、料理のレシピに相当する。レシピには、料理を作るための材料や手順が含まれているが、Docker イメージも同様に、コンテナを作成するための手順やファイルシステムのスナップショットが含まれている。
Docker Container ≒ 調理された料理
Docker コンテナは、調理された料理に相当する。これは、イメージに基づいて作成され、実行される実行可能な状態の環境です。各コンテナは、イメージを元にして独立して動作し、特定のアプリケーションやサービスを提供する。
Docker コンテナは、基本他人と共有しない。料理で考えれば直感的で調理された料理を共有するより、レシピで共有したほうが楽に決まっている。
だから Docker イメージ を色々な人が共有している。
Docker Compose ≒ コース料理
Docker Compose は、コース料理に相当する。複数のコンテナやサービスを組み合わせて、一連の関連する機能やサービスを提供するための設定や手順が含まれている。これにより、複数のサービスをまとめて管理することができる。
踏み込んで書くと、Docker Compose は、YAML フォーマットで記述されたコンポーズファイル(通常は docker-compose.yml
という名前)を使用して、複数のサービスやコンテナを定義しておく。このコンポーズファイルには、各サービスの設定、依存関係、ネットワーク設定、ボリュームのマウントなどが含まれている。ならば、 docker-compose.yml
は献立とかレシピ集に当たると言えそう。
なんで Docker Compose を作るか(一つのコンテナに複数のサービスやアプリを実行しないのか)というと、管理が複雑になるからである。一つのコンテナ(コンピュータ)で複数のサービスを運用すると、干渉が起きたり、複雑な設定になりがちだ。
コンテナは、イメージを作れば後から何回も呼び出せるのでシンプルな状態で運用しておき コンテナ同士を連携させておき トラブルシューティング などが簡単になるように運用するのが慣例となっている。
アプリケーションの実行 ≒ 料理の実食
最終的に、アプリケーションの実行は、料理を実食することに相当する。
コンテナが起動し、(場合によっては複雑なサービスを実行するときは コンポーズから立ち上げられて) サービスが提供され、アプリケーションが利用可能になる。