• docker 源码分析daemon1


    daomon 的main函数位于 cmd/dockerd/docker.go

    整个文件都比较简单

    func main() {
        if reexec.Init() {  //pkg/reexec/reexec.go   如果注册过initializer,则调用返回true,直接return,这里是false
            return
        }

        // Set terminal emulation based on platform as required.
        _, stdout, stderr := term.StdStreams()
        logrus.SetOutput(stderr)

        cmd := newDaemonCommand()   //新建一个cobra.command
        cmd.SetOutput(stdout)
        if err := cmd.Execute(); err != nil {   //执行
            fmt.Fprintf(stderr, "%s ", err)
            os.Exit(1)
        }
    }


    func newDaemonCommand() *cobra.Command {
        opts := daemonOptions{   //  新建 daemon的配置选项
            daemonConfig: config.New(),
            common:       cliflags.NewCommonOptions(),
        }

        cmd := &cobra.Command{   // 新建 一个 cobra.command
            Use:           "dockerd [OPTIONS]",
            Short:         "A self-sufficient runtime for containers.",
            SilenceUsage:  true,
            SilenceErrors: true,
            Args:          cli.NoArgs,
            RunE: func(cmd *cobra.Command, args []string) error {
                opts.flags = cmd.Flags()
                return runDaemon(opts)   // 执行函数为 runDaemon
            },
        }
        cli.SetupRootCommand(cmd)  // cli/cobra.go  同client 设置根命令

        flags := cmd.Flags()  // 新建一个flag
        flags.BoolVarP(&opts.version, "version", "v", false, "Print version information and quit")
        flags.StringVar(&opts.configFile, flagDaemonConfigFile, defaultDaemonConfigFile, "Daemon configuration file")
        opts.common.InstallFlags(flags)  //  cli/flags/common.go  同上,设置CommonOptions 里面的flag
        installConfigFlags(opts.daemonConfig, flags)  // 设置 daemonConfig 里面的flag
        installServiceFlags(flags)   //  设置 service相关的flag

        return cmd
    }

    与client不同的是daemon 的函数是区分操作系统的,runDaemon 下一节再分享

  • 相关阅读:
    update结合查询更新
    查表字段名,注释
    微信access_token
    Oracle中的dual伪表
    Oracle中的null
    UIView九宫格
    UIWebView使用
    sql触发器Tigger
    重写init方法
    OC内存管理示例
  • 原文地址:https://www.cnblogs.com/arwen-spy/p/6580178.html
Copyright © 2020-2023  润新知