docker daemenソース分析

3178 ワード

1今日は主に研究することになりました。このdaemenはdockerの中でどんな役を演じますか? 
docker daemenはServerモジュールを通じてclientのコマンド要求を受けて、異なる要求タイプによって異なるjobを作成して、docker engineで実行します。dockerは、異なるdocker driverによって、異なるdocker jobを完成して結果を返します。
このdocker serverは大きく三つの部分に分けられます。http server,router,route handles。
2前回はdocker入口関数mainが初期化中であることを知っていました。
c := cli.New(clientCli, daemonCli)
ここで必要なdaemen Cliの例はこのタイプです。
var daemonCli cli.Handler
は、docker/daemen.goで定義されています。
daemonCli cli.Handler = NewDaemonCli()
ですので、このNewDaemen Cli関数を調べてみます。この関数が最後に戻ったのは 一つの初期化されたdaemen cliオブジェクトは、daemen confingとdocker registry configを含むが、config値の設定はCmdDaemen()にある。
また、CmdDaemen関数を見にきました。/CmdDaemen is the daemen command、caled the raw argments after`docker daemen`は、docker daemenコマンドラインを実行した後に呼び出されたということです。
この関数の主な流れは何ですか?
1起動appi server: appi:=appiserver.New(serverConfig)
2初期routers:init Routers(api,d)
3もしエラーが発生したら、信号を出して、掃除をして、apperverを閉じて、自分の魂を集めるプロセスをクローズします。
signal.Trap(func() {
       api.Close()
       <-serveAPIWait
       shutdownDaemon(d, 15)
       if pfile != nil {
              if err := pfile.Remove(); err != nil {
                     logrus.Error(err)
              }
       }
})
4は、初期化が完了したと信号を送りました。notifySystem()
5初期化が完了したら、アプリを処理し、処理の終了を待つ。
3 init Routersについて
func initRouters(s *apiserver.Server, d *daemon.Daemon) {
       s.AddRouters(container.NewRouter(d),
              image.NewRouter(d),
              network.NewRouter(d),
              systemrouter.NewRouter(d),
              volume.NewRouter(d),
              build.NewRouter(dockerfile.NewBuildManager(d)))
}
は、さまざまなタイプのrouterをdaemenonのインスタンスで初期化してappiserverに追加する。