1.4.1 docker pull
1.3节中我们提到,用户可以为容器指定镜像,作为容器运行时的rootfs,既然如此,镜像从何而来则成为一个关键。答案很简单,一切都归功于docker pull命令。
docker pull命令的作用是:Docker Daemon从Docker Registry下载指定的容器镜像,并将镜像存储在本地的Graph中,以备后续创建Docker容器时使用。docker pull命令的执行流程如图1-10所示。
图1-10中有编号的箭头表示docker pull命令在发起后,Docker架构中相应模块所做的一系列运行操作。下面我们逐一分析这些步骤。
1)Docker Client处理用户发起的docker pull命令,解析完请求以及参数之后,发送一个HTTP请求给Docker Server,HTTP请求方法为POST,请求URL为"/images/create?"+"xxx",实际意义为下载相应的镜像。
2)Docker Server接收以上HTTP请求,并交给mux.Router,mux.Router通过URL以及请求方法类型来确定执行该请求的具体handler。
3)mux.Router将请求路由分发至相应的handler,具体为PostImagesCreate。
4)在PostImageCreate这个handler之中,创建并初始化一个名为"pull"的Job,之后触发执行该Job。
5)名为"pull"的Job在执行过程中执行pullRepository操作,即从Docker Registry中下载相应的一个或者多个Docker镜像。
6)名为"pull"的Job将下载的Docker镜像交给graphdriver管理。
7)graphdriver负责存储Docker镜像,一方面将实际镜像存储至本地文件系统中,另一方面为镜像创建对象,由Docker Daemon统一管理。
图1-10 docker pull命令执行流程示意图