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位字符组成
相关文章
|
1月前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
184 70
|
6天前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
71 26
|
25天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
78 27
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
135 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
26天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
69 22
|
1月前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
115 29
|
2月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
2月前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
64 3
docker push推送自己搭建的镜像
|
2月前
|
Docker 容器
|
2月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
80 9

热门文章

最新文章