Docker
feilengcui008
2016-10-08
929浏览量
简介:
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feilengcui008/article/details/52758877
本文主要介绍Docker的一些基本概念、Docker的源码分析、Docker的一些issue、Docker周边生态等等。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feilengcui008/article/details/52758877
本文主要介绍Docker的一些基本概念、Docker的源码分析、Docker的一些issue、Docker周边生态等等。
基本概念
Basics
docker大体包括三大部分,runtime(container)、image(graphdriver)、registry,runtime提供环境的隔离与资源的隔离和限制,image提供layer、image、rootfs的管理、registry负责镜像存储与分发。当然,还有其他一些比如data volume, network等等,总体来说还是分为计算、存储与网络。
computing
- 接口规范
- 命名空间隔离、资源隔离与限制的实现
- 造坑与入坑
network
-
接口规范与实现
- bridge
- veth pair for two namespace communication
- bridge and veth pair for multi-namespace communication
- do not support multi-host
-
overlay
- docker overlay netowrk: with swarm mode or with kv etcd/zookeeper/consul -> vxlan
- coreos flannel -> 多种backend,udp/vxlan…
- ovs
- weave -> udp and vxlan,与flannel udp不同的是会将多container的packet一块打包
-
一篇对比
-
calico
- null
- host
storage
- graphdriver(layers,image and rootfs)
- graph:独立于各个driver,记录image的各层依赖关系(DAG),注意是image不包括运行中的container的layer,当container commit生成image后,会将新layer的依赖关系写入
- device mapper
- snapshot基于block,allocation-on-demand
- 默认基于空洞文件(data and metadata)挂载到回环设备
- aufs
- diff:实际存储各个layer的变更数据
- layers:每个layer依赖的layers,包括正在运行中的container
- mnt:container的实际挂载根目录
- overlayfs
- vfs
- btrfs
- …
- volume
- driver接口
- local driver
- flocker: container和volume管理与迁移
- rancher的convoy:多重volume存储后端的支持device mapper, NFS, EBS…,提供快照、备份、恢复等功能
- 数据卷容器
- registry:与docker registry交互
- 支持basic/token等认证方式
- token可以基于basic/oauth等方式从第三方auth server获取bearer token
- tls通信的支持
- libkv
- 分布式存储的支持
security
- docker
- libseccomp限制系统调用(内部使用bpf)
- linux capabilities限制root用户权限范围scope
- user namespace用户和组的映射
- selinux
- apparmor
- …
- image and registry
Other Stuffs
-
迁移
- CRIU: Checkpoint/Restoreuser In User namespace
- CRAK: Checkpoint/Restart as A Kernel module
-
开放容器标准
源码分析
for docker 1.12.*
主要模块
- docker client
- DockerCli => 封装客户端的一些配置
- command => 注册docker client支持的接口
- docker/engine-api/client/[Types|Client|Request|Transport|Cancellable] => 规范访问dockerd apiserver的接口
- docker engine daemon
- DaemonCli
- apiserver => 接受docker client请求,转发到daemon rpc
- daemon => 其他功能比如设置docker根目录、inti process、dockerd运行的user namespace等其他信息
- 包含一个很重要的部分: remote => 通过libcontainerd与containerd的grpc server后端打交道
- cluster => swarm mode相关
- containerd
- containerd => grpc server,提供给dockerd操作容器、进程等的接口,提供containerd、containerd-shim、containerd-ctr工具
- libcontainer(runc)
- libcontainer(runc) 提供容器的生命周期相关的接口标准,提供runc工具
- 基本流程:docker client ==http==> dockerd apiserver ====> remote grpc client(libcontainerd) ==grpc==> containerd ==cmd==> containerd-shim ==cmd==> runc exec/create等 ==cmd==> runc init初始化坑内init进程环境,然后execve替换成容器指定的应用程序
详细分析
客户端部分省略,这里主要介绍docker engine daemon(DaemonCli)、containerd以及libcontainer(runc)三大部分。
相关系统
Docker和Mesos Container建坑流程和进程模型对比
注: P代表进程, L代表线程
issues
记录一些Docker相关项目遇到的一些bug或者issue
存储
JSON
数据格式
Docker
容器
搜索推荐
Kubernetes
Ubuntu
Linux
API
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。