docker client和daemom

client 模式

  docker命令对应的源文件是docker/docker.go,

docker [options] command [arg...]

  其中options参数为flag,任何时候执行一个命令docker命令都需要先解析flag,然后按照用户生命的command向指定的子命令执行对应的操作

       如果子命令为daemom,docker都会创建一个运行在宿主机上的daemom进程,即执行daemom模式。其余子命令都会执行client模式。处于client模式命令工作流程包含几个步骤

 1.解析flag信息

      docker命令支持大量的option,或者说flag,列出对于client模式下的docker比较重要的一些flag

      Debug,对应-D和--debug参数,他将向系统中添加DEBUG环境变量且赋值为1,并把日志显示级别调为DEBUG级,这个flag用于启动调试模式

      LogLevel,对应-l和--log-level 参数。默认等级为info,即只输出普通的操作信息。用户可以指定的日志等级现在有panic、fatal、error、warn、info、DEBUG这几种

      hosts,对应-h和--hosts=[]参数,对于client模式,就是指本次操作需要连接的docker daemom位置,而对于daemom模式,则提供所要监听的地址,若host变量或者系统环境变量DOCKER_HOST不为空,说明用户指定了host对象;否则使用默认设置,默认情况下Linux系统设置为unix:///var/run/docker.sock

      protAddrParts,这个参数来自-H参数中://前后的两部分的组合,即与docker daemom建立通信的协议方式与socke地址

 2创建client实例

扫描二维码关注公众号,回复: 5439320 查看本文章

      client的创建就是在已有配置参数信息的基础上,调用api/client/cli.go#NewDockerCli,需要设置好proto(传输协议)、addr(host的目标地址)和tlsConfig(安全传输层协议的配置),另外还会配置标准输入输出及错误输出

  3执行具体的命令

     Docker client 对象创建成功后,剩下的执行具体命令的过程就交给cli/cli.go来处理

   从命令到映射的方法

    cli主要通过反射机制,从用户输入的命令(如run)得到匹配的执行方法(CmdRun),这就是所谓“约定大于配置”的方法命名规范。

    同时,cli会根据参数列表的长度判断是否用于多级docker命令支持

猜你喜欢

转载自www.cnblogs.com/rdchenxi/p/10483898.html