プログラマのためのDocker教科書 (第1版) という本を読んだのですが、122 ページにあった以下の言葉で、理解し辛かったモヤモヤが晴れた気がします。
Docker はクライアント/サーバーアーキテクチャーを採用しており、DockerクライアントとDockerサーバーがRemote API経由で接続されています。そのため、docker ps などのコマンドはすべてサーバに送られて処理されます。
実際に確認してみます!
Windows 環境における Docker
Windows 10 Pro を所有する者は幸いである、Docker for Windows を使えるから。
僕は自宅は Windows 10 Home、職場は Windows 7 Pro というイマイチな環境なので、どちらも Docker Toolbox しか使えないんですよね。悲しいです。
というわけで、Docker Toolbox 環境におけるDocker のクライアント・サーバー環境について確認していきましょう。
Docker Toolbox のインストール
Docker Toolbox をインストールすると、以下が導入される模様。
- Docker Machine を管理する
docker-machine
コマンド - Docker Engine を管理する
docker
コマンド - Docker Compose を管理する
docker-compose
コマンド - Docker GUI の Kitematic (α版)
- bash 環境 (Git for Windows)
- Oracle VirtualBox
また以下の環境変数がセットされました。
DOCKER_CERT_PATH=C:\Users\z\.docker\machine\machines\default
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=1
DOCKER_TOOLBOX_INSTALL_PATH=C:\local\dev\Docker Toolbox
Docker クライアント
Docker は以下のショートカット・アイコンで開始します。
このショートカットに設定されている実行コマンドはこちら。bash で start.sh
というシェルスクリプトを実行しています。
C:\local\dev\Git\bin\bash.exe --login -i "C:\local\dev\Docker Toolbox\start.sh"
さて、ショートカットから起動してみましょう。最初の起動にはわりと時間がかかると思いますので、待ちましょう。
起動した Docker 環境がこちら。単なる bash 環境に、Docker の welcome メッセージが表示されているように見えますね。
そう、それで正解。これは docker 用にパスなど環境変数を事前にセットされた、単なる MinGW 上の bash 環境なのです。システム階層を簡単に表現すると、こんな感じ。
bash.exe |
---|
MSYS/Mingw-w64 |
Windows 10 Home |
ただし、先ほどの start.sh
というシェルスクリプトには docker-machine
コマンドが含まれており、裏でこっそり Docker サーバーを起動しています。最初の起動に時間がかかるのは、裏でサーバーが起動するのを待っているため。
Docker サーバー
さて、裏でこっそり起動される Docker サーバーについて確認しましょう。Oracle VM VirtualBox
アイコンで VirtualBox を起動します。
すると Docker Toolbox インストール時に default
という仮想マシンが作成されていることがわかります。これが Docker のサーバー側を担います。
ちなみにこの仮想マシンの設定を変えれば、Docker 実行環境のスペックが変わりますね。例えば上記ではメモリ量が1024MB=1GBですが、これを変更すればメモリ量を増加できたり。ストレージの容量を変更したり、ストレージを追加したり。
気になったポイントとしては、ユーザーフォルダを共有していること。
このフォルダ配下には個人的なファイルや、設定ファイルがいろいろ入っていて、セキュリティ的にちょっと不安ですが大丈夫でしょうか… 個人写真を勝手にネットに上げちゃう悪意ある Docker イメージなんて出回っていないですよね。って心配性な自分ですw
まあ、それはさておき。
Linux起動用に boot2docker.iso
のディスクイメージと、ストレージ用に disk.vmdk
ディスクファイルが設定されていますね。以下のファイルのようです。
さて、裏でこっそり起動している Docker サーバーとやらを、見てみましょう。といっても簡単、VirtualBox から該当イメージを「通常起動」するだけ。
ほら、仮想マシン上で boot2docker 環境、つまり Docker 用の Linux 環境が普通に起動してくれます。
システム階層を簡単に表現すると、こんな感じ?
bash |
---|
Docker デーモン |
boot2docker ディストリビューション |
Linux OS |
Oracle VM VirtualBox |
Windows 10 Home |
まあ、普通はクライアント側で docker-machine ssh default
で接続して使えばいいので、わざわざ仮想マシン側を表に出して起動する意味はありませんが。
ちょっとした遊び
docker-machine コマンドか、VirtualBox のほうで default 仮想マシンを終了しておきます。ここで Docker クライアントを起動すると、起動に時間がかかるわけなのですが…
VirtualBox のほうも起動しておくと、裏でサーバーとなる仮想マシン default がこっそり起動していて、それをクライアントが待っている様子がよくわかります。一度、並べて見てみてくださいw
というわけで
Docker Toolbox をインストールして起動してみた、だけのネタだったりします。
ただ自分としては Docker がクラサバ環境で動いている、という情報が新鮮だったので、それを実際に試してみた、のでわりと面白かったです。
さーて、本は読んだし、モヤモヤも晴れたし、これから Docker について何か試してみますかね。
ではでは!