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

2014/05/11に開催された「Golang Cafe #29」についてのまとめです。
前回に引き続き、今回もDockerソースコードを読んでいきます。


前回まででクライアント側はunixソケットあるいはtcpを使い、httpにてデーモン(サーバー)側とやりとりしていることが分かりました。
今回はデーモン側の起動までの流れを追っていきました。


デーモンとして起動された場合は、docker/engine.Engine型が作成されます。

docker/builtin.Register関数にて、initserver、init_networkdriver、serveapiという名前のHandler(docker/engine.Handler)がEngineに登録されます。
Handlerは/docker/engine.Job型の引数をとり/docker/engine.Statusを戻り値とする関数です。
Engine内に先ほどの名前をキーにマップで保持されます。
docker/engine.Engine.Jobメソッドで実行するHandlerを指定してdocker/engine.Job.Runで実行される流れとなります。


順序的には、
serveapi(docker/api/server.ServerApi)
initserver(docker/server.InitServer)
acceptconnections(docker/api/server.AcceptConnections)
の順位呼び出された起動が完了するようです。


serverapiでは実際にListenAndServeしているようです。
またacceptconnectionsに対するハンドラーが追加されています。


initserverでは追加のハンドラが登録されているようです。(createやcommitなど)


とりあえずこの辺りまで。