1.dockerådockeråºç¨ç¨åºçåºå«
2.Docker 源码分析
dockerådockeråºç¨ç¨åºçåºå«
å¦æä½ æ¯æ°æ®ä¸å¿æäºè®¡ç®ITååç人ï¼è¿ä¸å¹´å¤æ¥åºè¯¥ä¸ç´å¨å¬å°æ®éç容å¨ãå°¤å ¶æ¯Dockerï¼å ³äºå®ä»¬çæ°é»ä»æªé´æè¿ãDocker1.0å¨ä»å¹´6æåå¸åï¼å£°å¿æ´æ¯è¾¾å°äºåææªæçç¨åº¦ã
å¨éä¹æ以è¿ä¹å¤§ï¼å°±æ¯å 为许å¤å ¬å¸å¨ä»¥æ人çé度éç¨Dockerãå¨ä»å¹´7æçå¼æºå¤§ä¼ï¼OSConï¼ä¸ï¼æéå°äºæ©å·²å°æå¡å¨åºç¨ç¨åºä»èææºï¼VMï¼è½¬ç§»å°å®¹å¨çæ æ°ä¼ä¸ãçç¡®ï¼Dockerå ¬å¸ä¸»ç®¡æå¡åæ¯æçå¯æ»è£James Turnbullå¨ä¼ä¸åè¯æï¼å ¶ä¸æä¸å®¶å¤§é¶è¡ä¸ç´å¨ä½¿ç¨Dockerçæµè¯çï¼ç°å·²å¨ç产ç¯å¢ä¸ä½¿ç¨Dockerã对任ä½æ©æææ¯æ¥è¯´ï¼è¿æ çæ¯æ大çå 满èªä¿¡ç举å¨ï¼è¦ç¥éå®å¨å®å ¨è³ä¸çéèçå ä¹é»ææªé»ã
ä¸æ¤åæ¶ï¼Dockerè¿é¡¹å¼æºææ¯ä¸ä» ä» æ¯çº¢å¸½åCanonicalçLinux巨头ç¼éçå® å¿ã微软çä¸æè½¯ä»¶å ¬å¸ä¹å¨ççæ¥æ±Dockerã
é£ä¹ï¼ä¸ºä»ä¹å¤§å®¶é½è¿½æ§å®¹å¨åDockerå¢ï¼James Bottomleyæ¯Parallelså ¬å¸çæå¡å¨èæåé¦å¸ææ¯å®ï¼ä¹æ¯ä¸ä½ç¥åçLinuxå æ ¸å¼å人åãä»åæ解éï¼Hyper-VãKVMåXençèææºç®¡çç¨åºé½âåºäºèæå硬件仿çæºå¶ãè¿æå³çï¼å®ä»¬å¯¹ç³»ç»è¦æ±å¾é«ãâ
ç¶èï¼å®¹å¨å´ä½¿ç¨å ±äº«çæä½ç³»ç»ãè¿æå³çå®ä»¬å¨ä½¿ç¨ç³»ç»èµæºæ¹é¢æ¯èææºç®¡çç¨åºè¦é«æå¾å¤ã容å¨ä¸æ¯å¯¹ç¡¬ä»¶è¿è¡èæåå¤çï¼èæ¯é©»çå¨ååä¸ä¸ªLinuxå®ä¾ä¸ãè¿åè¿æ¥æå³çï¼ä½ å¯ä»¥â丢å¼æ²¡æç¨ç.9%çèææºåå¾ï¼å©ä¸ä¸ä¸ªå°å·§ç®æ´çè¶åå¼å®¹å¨ï¼éé¢å«æä½ çåºç¨ç¨åºï¼âBottomleyå¦æ¯è¯´ã
æ®Bottomley声称ï¼å æ¤ï¼åå©ç»è¿å ¨é¢è°ä¼ç容å¨ç³»ç»ï¼ä½ å°±å¯ä»¥å¨åä¸ç¡¬ä»¶ä¸æ¥ææ°éæ¯ä½¿ç¨XenèææºæKVMèææºå¤åºåå°å åçæå¡å¨åºç¨å®ä¾ã
æ¯ä¸æ¯è§å¾å¬èµ·æ¥å¾ä¸éï¼æ¯ç«ï¼ä½ å¯ä»¥è®©æå¡å¨è¿è¡å¤å¾å¤çåºç¨ç¨åºãé£ä¹ï¼ä¸ºä»ä¹ä¹å没æ人åè¿å¢ï¼å®é ä¸ï¼ä¹åæ人åè¿ã容å¨å ¶å®æ¯ä¸ªæ§æ¦å¿µã
容å¨å¯ä»¥è¿½æº¯å°è³å°å¹´åFreeBSD Jailsãç²éª¨æSolarisä¹æä¸ä¸ªç±»ä¼¼æ¦å¿µï¼å为Zonesï¼Parallelsãè°·æåDockerçå ¬å¸ä¸ç´å¨è´åäºç å诸å¦OpenVZåLXCï¼Linux容å¨ï¼ä¹ç±»çå¼æºé¡¹ç®ï¼æ¨å¨è®©å®¹å¨è¿è¡èµ·æ¥é¡ºç åå®å ¨ã
çç¡®ï¼å¾å°æ人ç¥é容å¨ï¼ä½å¤§å¤æ°äººå¤å¹´æ¥ä¸ç´å¨ä½¿ç¨å®¹å¨ãè°·æå°±æèªå·±çå¼æºå®¹å¨ææ¯lmctfyï¼Let Me Contain That For Youï¼æ为â让æå®¹çº³ä½ çç¨åºâï¼ãåªè¦ä½ 使ç¨è°·æçæ项åè½ï¼æ¯å¦æç´¢ãGmailãGoogle Docksææ è®ºå ¶ä»ä»ä¹ï¼å°±åé äºä¸ä¸ªæ°ç容å¨ã
ç¶èï¼Docker建ç«å¨LXCçåºç¡ä¸ãä¸ä»»ä½å®¹å¨ææ¯ä¸æ ·ï¼å°±è¯¥ç¨åºèè¨ï¼å®æèªå·±çæ件系ç»ãåå¨ç³»ç»ãå¤çå¨åå åçé¨ä»¶ã容å¨ä¸èææºä¹é´çåºå«ä¸»è¦å¨äºï¼èææºç®¡çç¨åºå¯¹æ´ä¸ªè®¾å¤è¿è¡æ½è±¡å¤çï¼è容å¨åªæ¯å¯¹æä½ç³»ç»å æ ¸è¿è¡æ½è±¡å¤çã
è¿åè¿æ¥æå³çï¼èææºç®¡çç¨åºè½å容å¨åä¸äºçä¸ä»¶äºå°±æ¯ï¼ä½¿ç¨ä¸åçæä½ç³»ç»æå æ ¸ãæ以ï¼ä¸¾ä¾è¯´ï¼ä½ å¯ä»¥ä½¿ç¨å¾®è½¯Azureï¼åæ¶è¿è¡Windows Serverçå®ä¾åSUSE Linuxä¼ä¸çº§æå¡å¨çå®ä¾ãè³äºDockerï¼ææ容å¨é½å¿ 须使ç¨åæ ·çæä½ç³»ç»åå æ ¸ã
å¦ä¸æ¹é¢ï¼å¦æä½ åªæ¯æ³è®©å°½å¯è½å¤çæå¡å¨åºç¨å®ä¾å¨å°½å¯è½å°ç硬件ä¸è¿è¡ï¼å¯è½ä¸å¤§å ³å¿è¿è¡å¤ä¸ªæä½ç³»ç»èææºãè¦æ¯åä¸åºç¨ç¨åºçå¤ä¸ªå¯æ¬æ£æ¯ä½ éè¦çï¼é£ä¹ä½ ä¼å欢ä¸å®¹å¨ã
æ¹ç¨Dockerè¿ä¸ä¸¾æªæææ¯å¹´ä¸ºæ°æ®ä¸å¿æäºè®¡ç®æå¡æä¾åèçæ°åä¸ç¾å ççµåå硬件ææ¬ãæ以é¾æªå®ä»¬å¨ä¸çªèå°å°½å¿«éç¨Dockerã
Docker带æ¥äºä¹åææ¯æ没æçå 个æ°ç¹ç¹ã第ä¸æ¯ï¼ä¸ä¹åçæ¹æ³ç¸æ¯ï¼Docker让容å¨é¨ç½²å使ç¨èµ·æ¥æ´å®¹æãæ´å®å ¨ãæ¤å¤ï¼ç±äºDockerä¸å ¶ä»å®¹å¨é¢åçå·¨æè¿è¡äºåä½ï¼å æ¬Canonicalãè°·æã红帽åParallelsï¼å ±åå¼åå ¶å ³é®çå¼æºç»ä»¶libcontainerï¼å®ä¸ºå®¹å¨å¸¦æ¥äºè¿«åéè¦çæ ååã
ä¸æ¤åæ¶ï¼å¹¿å¤§å¼å人åå¯ä»¥ä½¿ç¨Dockerå°è£ ã交ä»åè¿è¡ä»»ä½åºç¨ç¨åºï¼åºç¨ç¨åºæ为轻åçãå¯ç§»æ¤çãèªç»èªè¶³çLXC容å¨ï¼å¯ä»¥å¨ä»»ä½å°æ¹è¿è¡ãæ£å¦Bottomleyåè¯æï¼â容å¨è®©ä½ ç«å³äº«æåºç¨ç¨åºå¯ç§»æ¤æ§ãâ
å¸åºç ç©¶å ¬å¸ Researchçèµæ·±åæå¸Jay Lymanè¡¥å éï¼âä¼ä¸ç»ç»åæ±ä»¥ä¸ç§é«æãæ ååãå¯éå¤çæ¹å¼ï¼è®©åºç¨ç¨åºåå·¥ä½è´è½½æ´æäºç§»æ¤åååï¼èææ¶å¾é¾åå°è¿ç¹ãæ£å¦GitHubéè¿å ±äº«æºä»£ç æ¥ä¿è¿åä½ååæ°é£æ ·ï¼Docker HubãOfficial Reposååä¸æ¯æä¹å¨å¸®å©ä¼å¤ä¼ä¸éè¿æ¹è¿å°è£ ãé¨ç½²å管çåºç¨ç¨åºçæ¹å¼ï¼åºå¯¹è¿ä¸ªé¾é¢ãâ
æåä½å¹¶éæä¸éè¦çï¼Docker容å¨æäºé¨ç½²å°äºç«¯ãæ£å¦Ben Lloyd Pearsonå¨opensource.comä¸åéï¼âDockeréç¨äºä¸ç§ç¹å«çæ¹å¼ï¼ä»¥ä¾¿å¯ä»¥æ´åå°å¤§å¤æ°DevOpsï¼å¼åè¿è¥ï¼åºç¨ç¨åºå½ä¸ï¼å æ¬PuppetãChefãVagrantåAnsibleï¼æè å¯ä»¥ç¬èªä½¿ç¨ï¼ä»¥ç®¡çå¼åç¯å¢ã主è¦åç¹æ¯ï¼å®ç®åäºé常ç±å¦å¤è¿äºåºç¨ç¨åºæ§è¡ç好å¤ä»»å¡ãå ·ä½æ¥è¯´ï¼æäºDockerï¼äººä»¬å°±å¯ä»¥æ建ä¸æ´»å¨æå¡å¨ä¸æ¨¡ä¸æ ·çæ¬å°å¼åç¯å¢ï¼ä»åä¸ä¸ªä¸»æºè¿è¡å¤ä¸ªå¼åç¯å¢ï¼æ¯ä¸ªå¼åç¯å¢æç¬ç¹ç软件ãæä½ç³»ç»åé ç½®ï¼ï¼å¨æ°çæä¸åçæå¡å¨ä¸æµè¯é¡¹ç®ï¼ä»¥å让任ä½äººé½å¯ä»¥å¨è®¾ç½®ä¸æ¨¡ä¸æ ·çæ åµä¸å¤çåä¸é¡¹ç®ï¼æ 论æ¬å°ä¸»æºç¯å¢ææ ·ãâ
ç®èè¨ä¹ï¼Dockerè½ä¸ºä½ åçäºæ å°±æ¯ï¼ç¸æ¯å ¶ä»ææ¯ï¼å®è½è®©æ´å¤æ°éçåºç¨ç¨åºå¨åä¸ç¡¬ä»¶ä¸è¿è¡ï¼å®è®©å¼å人åæäºå¿«éæ建å¯éæ¶è¿è¡ç容å¨ååºç¨ç¨åºï¼å®å¤§å¤§ç®åäºç®¡çåé¨ç½²åºç¨ç¨åºçä»»å¡ãæ»èè¨ä¹ï¼æè½ç解ä½ä¸ºä¸é¡¹ä¼ä¸çº§ææ¯ï¼Docker为ä½ä¸ä¸å蹿红ãæåªæ¯å¸æå®ä¸è´ä¼æï¼å¦åå¤å¤´ä¼æä¸äºå¿§å¿å¿¡å¿¡çCEOåCIOã
Docker 源码分析
本文旨在解析Docker的源码核心架构设计思路,内容基于阅读《Docker源码分析》系文章后,源码整理的源码核心架构设计与关键部分摘抄。Docker是源码Docker公司开源的基于轻量级虚拟化技术的容器引擎项目,使用Go语言开发,源码遵循Apache 2.0协议。源码微信二狗源码Docker提供快速自动化部署应用的源码能力,利用内核虚拟化技术(namespaces及cgroups)实现资源隔离与安全保障。源码相比虚拟机,源码Docker容器运行时无需额外的源码系统开销,提升资源利用率与性能。源码Docker迅速获得业界认可,源码包括Google、源码Microsoft、源码VMware在内的源码多客源码领导者支持。Google推出Kubernetes提供Docker容器调度服务,Microsoft宣布Azure支持Kubernetes,VMware与Docker合作。Docker在分布式应用领域获得万美元的C轮融资。
Docker的架构主要由Docker Client、Docker Daemon、Docker Registry、源码不跳转Graph、Driver、libcontainer以及Docker container组成。
Docker Client:用户通过命令行工具与Docker Daemon建立通信,发起容器管理请求。
Docker Daemon:后台运行的系统进程,接收并处理Docker Client请求,CPJ指标源码通过路由与分发调度执行相应任务。
Docker Registry:存储容器镜像的仓库,支持公有与私有注册。
Graph:存储已下载镜像,并记录镜像间关系的数据库。
Driver:驱动模块,实现定制容器执行环境,拾金源码包括graphdriver、networkdriver和execdriver。
libcontainer:库,使用Go语言设计,直接访问内核API,提供容器管理功能。
Docker container:Docker架构的最终服务交付形式。
架构内各模块功能如下:
Docker Client:用户与Docker Daemon通信的客户端。
Docker Daemon:后台服务,接收并处理请求,执行job。
Graph:存储容器镜像,记录镜像间关系。
Driver:实现定制容器环境,包括管理、网络与执行驱动。
libcontainer:库,提供内核访问,实现容器管理。
Docker container:执行容器,提供隔离环境。
核心功能包括从Docker Registry下载镜像、创建容器、运行命令与网络配置。
总结,通过Docker源码学习,深入了解其设计、功能与价值,有助于在分布式系统实现中找到与已有平台的契合点。同时,熟悉Docker架构与设计思想,为云计算PaaS领域带来实践与创新启发。