概述
docker 是一個(gè)開發(fā)鼓鲁、交付和運(yùn)行的開放平臺(tái)蕴轨。docker 能使你的應(yīng)用和基礎(chǔ)設(shè)施解耦,從而使軟件交付更加的敏捷骇吭。docker 能像管理軟件一樣管理基礎(chǔ)設(shè)施橙弱。利用 docker 的特性,能快速的打包、測(cè)試和部署代碼棘脐,從而明顯的減少編寫的代碼部署到生產(chǎn)環(huán)境的周期斜筐。
docker 的打包和運(yùn)行應(yīng)用程序都是具有獨(dú)立的環(huán)境,體現(xiàn)了其隔離特性蛀缝。docker 不需要像虛擬機(jī)一樣去虛擬硬件顷链,而是直接運(yùn)行在主機(jī)的內(nèi)核上,體現(xiàn)輕量特性内斯。這些特性可以讓更多的容器運(yùn)行在同一個(gè)物理機(jī)或者虛擬機(jī)上蕴潦。
docker 提供的能力:
- 將應(yīng)用放入容器中
- 讓容器作為測(cè)試和交付的單元
- 以容器的形式或者編排服務(wù)的形式部署于生產(chǎn)環(huán)境》常可以是本地?cái)?shù)據(jù)中心潭苞,也可以是云主機(jī)
docker 官網(wǎng)介紹:
Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.
Docker provides the ability to package and run an application in a loosely isolated environment called a container. The isolation and security allow you to run many containers simultaneously on a given host. Containers are lightweight because they don’t need the extra load of a hypervisor, but run directly within the host machine’s kernel. This means you can run more containers on a given hardware combination than if you were using virtual machines. You can even run Docker containers within host machines that are actually virtual machines!
組成結(jié)構(gòu)
docker engine 的組成部分:
- docker CLI:接收并解析客戶端發(fā)送來的指令,例如:docker run
- REST API:用來和 daemon 交互的 API 接口
- docker daemon:docker 的守護(hù)進(jìn)程真朗,負(fù)責(zé)執(zhí)行客戶端發(fā)送來的命令
docker engine 的職能:
- 管理鏡像
- 管理容器
- 管理網(wǎng)絡(luò)
- 管理卷(掛載在宿主機(jī)的文件系統(tǒng))
體系結(jié)構(gòu)
- C/S 架構(gòu)此疹,客戶端(Client)和服務(wù)端(docker 守護(hù)進(jìn)程-Docker daemon)
- 客戶端負(fù)責(zé)發(fā)送構(gòu)建(docker build)、拉日谏簟(docker pull)蝗碎、運(yùn)行(docker run)指令
- 守護(hù)進(jìn)程負(fù)責(zé)執(zhí)行構(gòu)建、拉取旗扑、啟動(dòng)指令
- 守護(hù)進(jìn)程從倉庫(Registry)拉取鏡像(Images)
- 守護(hù)進(jìn)程將本地的鏡像啟動(dòng)后變?yōu)槿萜鳎–ontainers)
- 客戶端和守護(hù)進(jìn)程之間使用REST api蹦骑、unix套接字進(jìn)行通信
- 客戶端和守護(hù)進(jìn)程可以在同一個(gè)系統(tǒng)上運(yùn)行
docker 官方提供的架構(gòu)圖
特點(diǎn)
- 讓復(fù)雜的安裝一條命令解決
- 讓服務(wù)秒級(jí)啟動(dòng)
- 讓資源最大化使用
- 隔離性,文件隔離臀防、資源隔離眠菇、網(wǎng)絡(luò)隔離
名詞解釋
- 倉庫:存放鏡像的場(chǎng)所,類似于maven庫袱衷,npm庫
- 鏡像:只讀的程序包捎废,類似與jar包,npm包致燥,可以疊加很多層
- 容器:鏡像運(yùn)行后形成的一個(gè)實(shí)例登疗,一個(gè)鏡像可以啟動(dòng)多個(gè)容器,類似于jar啟動(dòng)的進(jìn)程
- tag:鏡像的標(biāo)簽嫌蚤,相當(dāng)于版本號(hào)
- docker client:客戶端通過命令與守護(hù)進(jìn)程交互辐益,類似于 mysql 客戶端
- docker daemon:docker 的守護(hù)進(jìn)程,接收并執(zhí)行客戶端發(fā)送來的指令搬葬,類似于mysql服務(wù)端
- docker host:運(yùn)行 docker 守護(hù)進(jìn)程和容器的宿主機(jī)器(物理機(jī)/虛擬機(jī))
- docker-io:就是docker荷腊,ubuntu在維護(hù)(不是非常清楚)
- docker-engine:就是docker,docker deamon + REST API + docker CLI
- docker-ce:社區(qū)版本急凰,免費(fèi),在docker17及以上開始普及docker-ce和docker-ee
- docker-ee:企業(yè)版本,收費(fèi)抡锈,docker準(zhǔn)備收割的利器
- docker-machine:創(chuàng)建docker host的工具疾忍,可以在一臺(tái)物理機(jī)上模擬多個(gè)docker環(huán)境
- docker swarm:docker的集群管理工具,(1.12及以上版本內(nèi)置了swarm)
- docker compose:單機(jī)版的docker服務(wù)編排工具床三,使用compose file v1/v2面向容器編排設(shè)計(jì)
- docker stack:docker stack deploy一罩,跨宿主機(jī)的服務(wù)編排,使用compose file V3版本撇簿。(1.13及以上版本內(nèi)置了stack)
- AFUS:docker的分層文件系統(tǒng)聂渊,上層依賴底層。Docker鏡像是由多個(gè)文件系統(tǒng)(只讀層)疊加而成
- docker volume:由于容器中存儲(chǔ)數(shù)據(jù)容易丟失四瘫,所以將持久化的數(shù)據(jù)以映射的形式汉嗽,將宿主機(jī)的目錄掛載到容器的目錄上。類似于服務(wù)器的共享存儲(chǔ)找蜜。
版本說明
- 低版本的docker沒有swarm功能饼暑,必須在1.12版本及以上
- 1.13版本以上docker自帶stack
- 1.12發(fā)布于2016.6,適合centos-7-1511
- 1.13發(fā)布于2017.1洗做,適合centos-7-1611
容器和虛擬機(jī)的區(qū)別
虛擬機(jī)(Virtual Machine):
虛擬硬件設(shè)備作為基礎(chǔ)設(shè)施弓叛,每個(gè)虛擬機(jī)擁有獨(dú)享的內(nèi)核,能運(yùn)行完整的操作系統(tǒng)诚纸,操作系統(tǒng)級(jí)別的隔離撰筷。
容器LXC(Linux Container):
輕量級(jí)的虛擬化,生成獨(dú)立的運(yùn)行環(huán)境畦徘,和主機(jī)共享內(nèi)核毕籽,應(yīng)用程序級(jí)別的隔離。
參考資料
- docker 鏡像搜索:https://hub.docker.com/
- docker 文檔查看:https://docs.docker.com/
- docker 官方介紹:https://docs.docker.com/engine/docker-overview/
- docker 架構(gòu)詳解:http://www.infoq.com/cn/articles/docker-source-code-analysis-part1/
- docker 特性列舉:http://www.lupaworld.com/article-243555-1.html
- docker 是什么:https://segmentfault.com/a/1190000002609286