はじめに
ここまでDockerを理解するという目的の下、第4回まで記事を書いてきました。
Docker理解への道① ~Makefile / docker compose編~
Docker理解への道② 〜docker-compose.ymlの徹底的な理解〜
Docker理解への道③ 〜docker-compose.ymlのimageとbuildについて〜
Docker理解への道④ 〜docker-compose.ymlのボリュームとネットワークについて〜
概念的なものを理解するというよりは、コードに書いてあることから、段階的に理解していくという形をとってきました。
今日はもう少し踏み込んで、「実際にdocker-compose.ymlで書かれた内容がどうやってDocker Desktopで可視化できる状態にまでに至るのか」を学習していきます。
そのためにはまず、Docker Destkopへの理解が必要になります。
Docker Desktopの役割
私は当初、Docker DesktopはGUIアプリかと思っていました。間違ってはいないもの、実際には他に2つの側面がありました。それが、
- 仮想的なLinux環境の構築
- コマンドの通訳
です。
そもそもなぜこの役割が必要かというと、Dockerの本体であるDockerデーモン(バックグラウンドで常に稼働し、特定のサービスや機能を提供するプログラム)がLinuxでのみ動くものだからです。
まず、1(仮想的なLinux環境の構築)についてですが、Docker Desktopが最初に行うことです。Dockerそのものを動かせるようにするため、このDocker DesktopがPC上に仮想環境を構築して、Dockerデーモンを召喚します。ここで初めて実体として存在するようになります。
そして次に2(コマンドの通訳)です。実際にdocker-compose.ymlなどで定義されたコードをCLIコマンド(例:docker compose up)で実行することで、このDocker Desktopが、Linuxしか理解できないDockerデーモンに翻訳した形で指示を渡します。翻訳された設計書を見たDockerデーモンがその設計書をもとに、各サービス(コンテナ、ボリューム、ネットワーク)を作り出すのです。
そしてDocker Desktop最後の役割が、そうして作り出された各サービスの状況を可視化させることです。GUIアプリとして、作成したものが可視化できて、コードとのつながりを実感できるようになります。
実際にDocker Desktop触ってみると、コンテナやボリュームなど、定義したものを見ることができました。
Docker Desktopについては、以上です。Docker Desktopの基本的な役割と、docker-compose.ymlで定義した内容がどのようにDocker Desktop上で可視化されるのか、お分かりいただけたでしょうか。
まとめ
おさらいすると、Docker Desktopの役割は主に3つで、それが以下のとおりです。
- 仮想的なLinux環境の構築
- コマンドの通訳
- GUIアプリ
そして、そのDocker Desktop上の可視化までの流れは以下のとおりです。
Docker Desktopが仮想環境構築
→Dockerデーモン召喚
→docker-compose.ymlなどで行った設計をコマンド実行
→docker DesktopがDockerデーモンが理解できる形(Linux)に翻訳
→Dockerデーモンが受けとった情報をもとに各サービス生成
→Docker Desktopアプリで生成された各サービスが可視化