docker学习 - docker启动和镜像

简介: # docker daemon启动 载体为daemon,调度管理engine,任务执行靠job Engine是map[string]Handler,type Handler func(*Job) Status Daemon的启动流程: - 注册serve job、pull job、create job、start job等 - 构建serveapi job,并执行ServeApi h

docker daemon启动

载体为daemon,调度管理engine,任务执行靠job
Engine是map[string]Handler,type Handler func(*Job) Status

Daemon的启动流程:

  • 注册serve job、pull job、create job、start job等
  • 构建serveapi job,并执行ServeApi handler,创建支持多种协议请求(tcp/socker fd/默认unix socket)的http Server,支持TLS,包含http路由规则”POST”:{“/images/create”: postImagesCreate}
  • 初始化graphdriver、graphdb、 graph.TagStore、 execdriver、volumedriver、daemon网络环境
  • 构建init_networkdriver job,创建docker0网桥,配置iptables对容器发出的数据包做snat地址转换,是否开启容器间的通信

镜像下载

Docker pull Ubuntu:14.04
Docker client流程

  • 解析命令行获取镜像名和register地址,反射机制调用DockerCli.CmdPull,从dockercfg中读出用户认证信息,构建RESTful请求/images/create

Docker server流程

  • http路由规则对应执行postImagesCreate,从url中解析出镜像名、register地址和用户认证信息,执行pull job与registry建立session
    Session包含认证信息和主机环境信息的http请求的工厂模式,需要和register发起多次请求

和docker register的通信

  • 请求获取指定镜像名的image所有tag信息,存到RepositoryData中
    screenshot.png
  • 获得下载镜像的image_id后,通过TagStore.pullingPool检查是否该镜像正在下载,map[string]chan struct{}
  • 请求获取指定image_id的所有parent的image_id
  • 对每个待下载的image_id,通过graph.idIndex检查是否在本地的镜像仓库graph中
  • 请求获取该image_id的image json和大小信息,构建Image对象
  • 请求获取该image_id的内容
  • 在graph文件系统aufs/overlayfs存储image

配置TagStore

  • 将下载的所有image_id都写入TagStore.Repositories中
  • TagStore持久化到path.Join(config.root, “repositories-{graphfs}”)
    screenshot.png

镜像存储

注册到Graph中(aufs)

  • aufs在layers/diff/mnt中创建image_id目录layers保留每个镜像的所有祖先镜像列表diff存储每个镜像layer的内容mnt该层镜像上挂载的可读写layer
  • Union mount先以只读方式mount该镜像的所有祖先镜像的diff目录到该镜像的mnt目录,再以读写方式mount该镜像的diff目录到其mnt目录
  • 将压缩的镜像内容(http body)解压到layer目录,通过文件流开头的10字节来判断文件类型,文件流封装在ProcessReader带进度条的文件流
  • path.Join(Graph.root, image_id)中保留image json和文件大小的layersize文件
  • 注册镜像id,idIndex是基数树/前缀树image_id由64位字符组成
相关文章
|
19天前
|
应用服务中间件 Linux nginx
Docker镜像-手动制作yum版nginx镜像
这篇文章介绍了如何手动制作一个基于CentOS 7.6的Docker镜像,其中包括下载指定版本的CentOS镜像,创建容器,配置阿里云软件源,安装并配置nginx,自定义nginx日志格式和web页面,最后提交镜像并基于该镜像启动新容器的详细步骤。
79 21
Docker镜像-手动制作yum版nginx镜像
|
19天前
|
应用服务中间件 nginx Docker
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
95 17
Docker镜像-基于DockerFile制作编译版nginx镜像
|
19天前
|
应用服务中间件 Linux nginx
Docker镜像管理篇
关于Docker镜像管理的教程,涵盖了Docker镜像的基本概念、管理命令以及如何制作Docker镜像等内容。
90 7
Docker镜像管理篇
|
19天前
|
应用服务中间件 Linux nginx
Docker镜像-基于DockerFile制作yum版nginx镜像
本文介绍了如何使用Dockerfile制作一个基于CentOS 7.6.1810的yum版nginx镜像,并提供了详细的步骤和命令。
60 20
|
7天前
|
存储 Ubuntu Docker
Docker学习
Docker学习
43 4
|
18天前
|
Docker 容器
Docker Hub镜像公共仓库使用
这篇文章介绍了如何使用Docker Hub公共仓库进行镜像的创建、上传、下载和管理。
310 8
|
25天前
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
65 5
|
25天前
|
运维 Ubuntu Shell
掌握Docker容器的创建:从镜像到实例
【8月更文挑战第27天】
98 4
|
23天前
|
物联网 Serverless API
函数计算产品使用问题之怎么部署Docker镜像进行lora训练
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
24天前
|
网络协议 Shell Docker
docker 学习之路
docker 学习之路
22 1