pouch架构源码分析

// daemon/daemon.go

1、func NewDaemon(cfg config.Config) *Daemon

  • 调用containerStore, err := meta.NewStore(...)创建存储
  • 调用containerd, err := ctrd.NewClient(ctrd.Config{...})构建containerd的client
  • 最后,构建并返回&Daemon{}结构

 

// daemon/daemon.go

2、func (d *Daemon) Run() error

  • 创建各种manager
  • 用各种manager以及d.config构建server.Server{}并赋值给d.server
  • 最后,调用d.server.Start()

 

// api/server/server.go

3、func (s *Server) Start() (err error)

  • 调用router := initRoute(s)生成http请求的handler
  • 遍历s.Config.Listen,其值默认为[]string{"unix:///var/run/pouchd.sock"},并调用l, err := getListener(one, tlsConfig)创建listener,并加入s.listeners中
  • 最后,对每个listener生成一个goroutine,并调用errCh <- http.Server(l, router)

 

posted on 2017-12-05 10:38  姚灯灯!  阅读(319)  评论(0编辑  收藏

导航