優(yōu)購物官方網(wǎng)站化妝品搜狗站長推送工具
docker是什么
- docker本質(zhì)
- docker和虛擬機(jī)的區(qū)別
- docker架構(gòu)
- Docker Registry
- 鏡像倉庫分類
- 鏡像倉庫工作機(jī)制
- docker Hub
docker本質(zhì)
Docker 本質(zhì)其實是 LXC 之類的增強版,它本身不是容器,而是容器的易用工具。容
器是 linux 內(nèi)核中的技術(shù),Docker 只是把這種技術(shù)在使用上簡易普及了。Docker 在早
期的版本其核心就是 LXC 的二次封裝發(fā)行版。Docker 作為容器技術(shù)的一個實現(xiàn),或者說讓容器技術(shù)普及開來的最成功的實現(xiàn)。Docker 是基于 Go 語言實現(xiàn)的一個開源項目,它的主要目標(biāo)是“Build,Ship andRun Any APP,Anywhere”,即通過對組件的封裝、分發(fā)、部署、運行等生命周期的管理,使得用戶的應(yīng)用及其運行環(huán)境能夠做到“一次封裝,到處運行”。早期 Docker 利用 LXC 做容器管理引擎,但是在創(chuàng)建容器時,不再使用模板去安裝生成,而是通過鏡像技術(shù)(把一個操作系統(tǒng)用戶空間所需要使用到的組件事先編排好,并整體打包成一個文件,image 文件),鏡像文件集中放在一個倉庫中。當(dāng)需要創(chuàng)建容器時,Docker 調(diào)用 LXC 的工具 lxc-create,但不再通過 lxc 的模板去安裝,而是連接到鏡像服務(wù)器上下載匹配的鏡像文件,而后基于鏡像啟動容器。所以,Docker 極大的簡化了容器的使用難度。以后我們創(chuàng)建啟動容器,只需要一個命令,docker-run,docker-stop 就可以啟動停止一個容器了。
docker和虛擬機(jī)的區(qū)別
- 從磁盤占用上來說,虛擬機(jī)所需要的磁盤空間會更大,而docker需要的磁盤空間會更少,因為對于虛擬機(jī)來說,它是從物理層開始往上進(jìn)行模擬的,每個虛擬機(jī)都有自己的操作系統(tǒng),而對于docker來說則不是,docker只是將程序和運行環(huán)境打包在了一起,多個docker之間共享宿主機(jī)的操作系統(tǒng);
- 從cpu和內(nèi)存占用上來說,虛擬操作系統(tǒng)非常占用cpu和內(nèi)存,需要通過虛擬層調(diào)用,占用率高,而對于docker來說,docker引擎占用資源極低,直接作用于宿主機(jī)操作系統(tǒng),占用率會比較少;
- 從啟動速度上來說,虛擬機(jī)的啟動速度比較慢,因為虛擬機(jī)需要啟動自己的虛擬操作系統(tǒng),而docker不用;
- 從應(yīng)用部署上來說,虛擬機(jī)需要手動進(jìn)行部署,速度慢,而docker可以體系化部署,可以自動化,速度較快;
- 從隔離性上來說,虛擬機(jī)的隔離性更高,docker隔離性較低;
- 從封裝性上來說,虛擬機(jī)是打包整個操作系統(tǒng),而docker是打包項目代碼和依賴信息,docker會更加輕量化;
docker為什么比虛擬機(jī)資源利用率高,啟動塊?
- 一個虛擬機(jī)在啟動的時候,徐要重新加載操作系統(tǒng),而容器的啟動不需要,因此docker在啟動上比虛擬機(jī)更快;
- 容器通過docker engine創(chuàng)建出來,之后,容器可以自己于宿主機(jī)OS進(jìn)行交互;而對于虛擬機(jī)來說,虛擬機(jī)傳遞出來的信息需要通過Hypervisor層才能于宿主機(jī)的操作系統(tǒng)進(jìn)行交互,因此在cpu和內(nèi)存利用率上,docker會比虛擬機(jī)更加高效;
docker架構(gòu)
Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠(yuǎn)程 API 來管理和創(chuàng)建 Docker 容器。
Docker 容器通過 Docker 鏡像來創(chuàng)建。
- registry
docker 倉庫,用來保存鏡像文件的,可以理解為版本控制中的代碼倉庫(gitHub、gitee等)。docker這個倉庫是由docker官方自己提供的,名字叫docker Hub;- Docker daemon
Docker daemon 是服務(wù)器組件,是docker最核心的后臺進(jìn)程,我們也把它稱為守護(hù)進(jìn)程,docker容器的創(chuàng)建就是由這個組件來完成的,當(dāng)然,如果你的服務(wù)器山想要運行docker容器,該組件也是必不可少的;- docker client
docker 客戶端可以通過命令行或者其它工具使用docker API來與docker daemon進(jìn)行交互(類比于mysql);- docker Host
一個物理的或虛擬的機(jī)器,就是docker daemon進(jìn)程跑起來的機(jī)器;- docker image
就是用來創(chuàng)建docker容器的模板,容器于鏡像的關(guān)系,類比于類和對象的區(qū)別;- docker 容器
基于某個docker鏡像跑起來的docker 容器;
現(xiàn)在我們用直白的語言來理解以上過程:
你現(xiàn)在想要去買一個小米15的手機(jī),于是走向了離你最近的小米之家,然后問了問店員:“你們這里有沒有小米15?”,無非就得到兩種回答,第一種:“有的先生,你需要什么配置和顏色?”;第二種:“不好意思先生,我們當(dāng)前門店沒有現(xiàn)貨,如果您確實需要的話,我可以去市里面的倉庫中給你調(diào)集一臺過來”;對于第一種情況,我們只需要詳細(xì)告訴店員我們需要的配置和顏色,即可把小米15拿回家了,而對于第二種情況的話,則需要等待店員去倉庫調(diào)取,我們才能拿到,在倉庫中,又分為許許多多的小倉庫,每個小倉庫放的都是不同型號的手機(jī),比如有些小倉庫放的是小米14、有的是小米13等等,店員只需要找到小米15的小倉庫,然后根據(jù)用戶要求的配置和顏色,拿取對應(yīng)的手機(jī)即可,在此之后,我們終于拿到了心心念念的小米15了,然后欣喜的開機(jī),開始了與小米15沒羞沒臊的生活了…
在上面這個故事中,用戶就類似我docker架構(gòu)中的客戶端,小米之家就類似于docker中的服務(wù)端,存放手機(jī)的倉庫,就類似于docker Hub,未開機(jī)的手機(jī)類似于鏡像,開機(jī)運行的手機(jī),類似于容器;
Docker Registry
鏡像倉庫 (Docker Registry) 負(fù)責(zé)存儲、管理和分發(fā)鏡像,并且提供了登錄認(rèn)證能力,建立了倉庫的索引。
鏡像倉庫管理多個 Repository, Repository 通過命名來區(qū)分。每個 Repository 包含一
個或多個鏡像,鏡像通過鏡像名稱和標(biāo)簽 (Tag)來區(qū)分。
這里的鏡像倉庫,就類似于上文故事中的,存放小米手機(jī)的倉庫;Repository就類似于倉庫中的一個個小倉庫;而在小倉庫都存放著型號相同的手機(jī),但是配置不一致,Repository也是類似,存放的都是功能相同的鏡像,但是每個鏡像之間版本不同;
一個容器鏡像包含了兩個部分,一個是元數(shù)據(jù),其實就是由 dockerfile 構(gòu)建出來的描述文件,這個描述文件會說這個容器鏡像有多少層,每一層里面有什么內(nèi)容,它的checksum 這些信息都會記錄下來,還有最終的可執(zhí)行文件在哪就是在存儲數(shù)據(jù)里面,就是在一個一個的 blob 里面,真正占有空間的就是這些 blob。
鏡像倉庫分類
按是否對外開放劃分,也是研發(fā)人員常說的:
- 公有倉庫:像阿里云、dockerhub 等放到公有網(wǎng)絡(luò)上,不用登錄就可以下載鏡像,
供大家訪問使用- 私有倉庫:不對外開放,往往位于私有網(wǎng)絡(luò),只有公司內(nèi)部人員可以使用。
按供應(yīng)商和面向群體劃分:
- sponsor(贊助) registry:第三方的 registry,供客戶和 docker 社區(qū)版使用.
- mirror(鏡像) registry:第三方的 registry,只讓客戶使用,例如阿里云必須注冊才能使用.
- vendor(供應(yīng)商) registry:由發(fā)布 docker 鏡像的供應(yīng)商提供的 registry,例如像Google 和 Redhat 提供了鏡像倉庫服務(wù).
- private registry:通過沒有防火墻和額外的安全層的私有實體提供的 registry,僅供內(nèi)部使用.
鏡像倉庫工作機(jī)制
鏡像倉庫使用流程:
- 創(chuàng)建倉庫,在docker Hub、阿里云、騰訊云上創(chuàng)建即可;
- docker login 倉庫地址: 使用該命令登錄你的倉庫,如果不指定倉庫地址,那么默認(rèn)登錄的是docker Hub倉庫;
- docker pull 如果你是從docker 官方倉庫拉取,那么其實與前面的docker login關(guān)系不大;如果你是從自己的倉庫拉取,那么前面的docker login關(guān)系就比較大,如果拉取的自己的倉庫是開源的,那么docker pull可以直接拉取成功;但如果是私有的,那么你直接拉取會失敗,要想成功,必須使用docker login登錄;
- docker push :推送鏡像,無論我們要推送的倉庫是開源的還是私有的,都必須登錄才可以推送;
實際研發(fā)中鏡像倉庫如何使用:
Docker Registry 中的鏡像通常由開發(fā)人員制作,而后推送至“公共”或“私有”Registry 上
保存,供其他人員使用,例如“部署”到生產(chǎn)環(huán)境;
docker Hub
docker Hub是什么?
Docker Hub 是 Docker 提供的托管存儲庫服務(wù),用于查找容器映像并與您的團(tuán)隊共享。
具有以下功能:
- 個人可以注冊私有倉庫,能夠發(fā)布自己的鏡像
- 提供鏡像檢索能力
- 提供海量官方和認(rèn)證組織的鏡像
- 從 GitHub 和 Bitbucket 自動構(gòu)建容器鏡像并將它們推送到 Docker Hub
- 支持 webhook(webhook 是一種基于 HTTP 的回調(diào)函數(shù),發(fā)生指定的事件時,服務(wù)器會自動將相關(guān)的有效負(fù)載發(fā)送到客戶端的 webhook URL。 )
docker Hub功能瀏覽:
- 鏡像搜索
- 鏡像tag查找:
國內(nèi)鏡像源:
一般來說docker pull從官方倉庫拉取鏡像會比較慢,畢竟docker hub的服務(wù)器在國外麻,為了解決這個問題,我們一般會為docker damemon配置,國內(nèi)鏡像倉庫,就是讓我們每次docker pull的時候,docker daemon都能先去鏡像倉庫中看看,實在沒找到再去docker Hub倉庫查找,這樣會加快我們鏡像拉取的速率;
如何配置國內(nèi)鏡像源:
- 打開/etc/docker/daemon.json文件,沒有就創(chuàng)建一個;
- 在這個文件中寫入:
{
“registry-mirrors”:[“https://zue8awxu.mirror.aliyuncs.com”]
}- 注意如果最外層以及你給有了配置,不要直接覆蓋,而是將下面的內(nèi)容添加,然
后確保 json 的格式正確- 重新加載配置,并重新啟動docker
systemctl daemon-reload //加載配置
systemctl restart docker //重啟docker服務(wù)