docker daemenソース分析
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が初期化中であることを知っていました。
また、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を閉じて、自分の魂を集めるプロセスをクローズします。
5初期化が完了したら、アプリを処理し、処理の終了を待つ。
3 init Routersについて
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に追加する。