Golang Cafe #30 まとめ Dockerのソースコードを読む。その4

2014/05/18に開催された「Golang Cafe #30」についてのまとめです。
前回に引き続き、今回もDockerソースコードを読んでいきましたが、
その前に以前から気になっていたGoのプレゼンテーションツールについて調べたので、最初にこちらについて紹介させていただきました。

Goのプレゼンテーションツール

Go言語関連の発表によく使用されているプレゼンテーションツールついて調べてまとめておきましたのでリンク先を参照してください。

1つ目のリンクはメモ書き程度なので2つめのリンクを参照してもらえればよいかと思います。
プレゼンテーションツールの使い方自体をプレゼンテーションツールで作ってみました。

Dockerのソースコードを読む の続き

前回はデーモン側が起動するまでの流れを追いかけて行きました。
今回はクライアント側からコマンドを受信してからの流れをみていきます。


一番簡単そうなversionコマンドで流れをみていきます。

$ docker version

が実行されると、/versionがGETでリクエストされます。


ハンドラに登録されている/docker/api/server/getVersion関数が実行されます。
レスポンスのContent-Typeにapplication/jsonがセットされ、
/docker/engine/EngineのServeHTTPメソッドが呼び出されます。
ServeHTTPメソッド内でURLから実行するジョブ名と引数を決定し、ジョブの出力先をレスポンスに設定して実行されます。
実行されるジョブは、前回までにみたようにデーモンの初期化時に/docker/server/InitServer関数で登録されています。
versionの場合は、/docker/server/ServerのDockerVersionメソッドが実行されます。
/docker/engine/Envにレスポンスに出力する値を設定して/docker/engine/EnvのWriteToメソッドに出力先を渡して呼び出されます。
WriteToメソッド内では、設定された値をJSONに変換して出力されてます。
最終的にこの内容がクライアントに返されます。


versionコマンドの流れを見てきましたが、基本的にはどのコマンドもこの流れではないのかと推測されます。


と、今回はこの辺りまで。

次回

数回にわたってDockerソースコードを読み進めてきましたが、今回で一旦お休みします。
次回(既にこのブログを書いている時点で終わっていますが)はGo Concurrency Patterns: Pipelines and cancellation - The Go Blogを読み進めて行く予定です。(でした)