版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDOCKER入門學習 運營技術(shù)支持部 許叁征 2015.6Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC虛擬化 全虛擬化 最早的虛擬機,顧名思義,就是用程序模擬出了一個完整的物理機運行環(huán)境,包括了CPU、內(nèi)存、硬盤、網(wǎng)卡等等。 QEMU VMwareCopyright 2000-2010 ChinaNetCenter.ALL Rights Reserved.
2、| www.ChinaNetC半虛擬化 模擬必定產(chǎn)生性能損耗,所以就有半虛擬化來應(yīng)對這種窘境。網(wǎng)絡(luò)、硬盤等部件,直接使用硬件資源,而不進行模擬。 XEN 就是代表。XEN通過使用特定的內(nèi)核(物理機和宿主機都需要用開啟了半虛擬化特性的內(nèi)核),可以讓虛擬機直接使用物理機的資源,只虛擬部分硬件。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC 現(xiàn)在QEMU、VMware也加入了很多半虛擬化的特性。 比如 QEMU-KVM支持,俗稱KVM。 VMware的VMware-tools。Copyright 2000
3、-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC隔離 不管是全虛擬化,還是半虛擬化,終究無法擺脫“虛擬”二字。所以,要再次提高性能?干脆就別模擬任何硬件了吧。把一個個的進程隔離起來運行就好了:A進程打開了80端口,B進程也打開了80端口,但是其實他們相互看不見,也影響不到。A進程刪除了/test,B進程沒有刪除/test,他們也相互不影響,因為他們只是刪除或者保留了不同目錄下的/test。 Linux DockerCopyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. |
4、www.ChinaNetCDocker隔離了什么 進程號 網(wǎng)絡(luò) IPC 掛載點 UTS(沒深入了解) 用戶Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC什么是什么是 DockerDocker 是一個開源項目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個業(yè)余項目。它基于 Google 公司推出的 Go 語言實現(xiàn)。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協(xié)議,項目代碼在 GitHub 上進行維護。Docker 自開源后受到廣泛的關(guān)注和討論,以至于 dotC
5、loud 公司后來都改名為 Docker Inc。Redhat 已經(jīng)在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產(chǎn)品中廣泛應(yīng)用。Docker 項目的目標是實現(xiàn)輕量級的操作系統(tǒng)虛擬化解決方案。 Docker 的基礎(chǔ)是 Linux 容器(LXC)等技術(shù)。在 LXC 的基礎(chǔ)上 Docker 進行了進一步的封裝,讓用戶不需要去關(guān)心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處,可見容器是在操作系統(tǒng)層面上實現(xiàn)虛擬化,直接復用本地主機的操作系統(tǒng),而傳統(tǒng)方式則是
6、在硬件層面實現(xiàn)。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDocker原理 Docker會在隔離的容器中運行進程。當運行docker run命令時,Docker會啟動一個進程,并為這個進程分配其獨占的文件系統(tǒng)、網(wǎng)絡(luò)資源和以此進程為根進程的進程組。在容器啟動時,鏡像可能已經(jīng)定義了要運行的二進制文件、暴露的網(wǎng)絡(luò)端口等,但是用戶可以通過docker run命令重新定義(譯者注:docker run可以控制一個容器運行時的行為,它可以覆蓋docker build在構(gòu)建鏡像時的一些默認配置。Copyrig
7、ht 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDocker容器和虛擬機的區(qū)別Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC架構(gòu)Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDOCKER特性交互式交互式Shell:Docker可以分配一個虛擬終端并關(guān)聯(lián)到任何容器的標準輸入上,例如運行一個一次性交互shell文件系統(tǒng)文件系統(tǒng)隔離
8、隔離:每個進程容器運行在完全獨立的根文件系統(tǒng)里寫寫時復制時復制:采用寫時復制方式創(chuàng)建根文件系統(tǒng),這讓部署變得極其快捷,并且節(jié)省內(nèi)存和硬盤空間資源資源隔離隔離:可以使用cgroup為每個進程容器分配不同的系統(tǒng)資源網(wǎng)絡(luò)網(wǎng)絡(luò)隔離隔離:每個進程容器運行在自己的網(wǎng)絡(luò)命名空間里,擁有自己的虛擬接口和IP地址日志日志記錄記錄:Docker將會收集和記錄每個進程容器的標準流(stdout/stderr/stdin),用于實時檢索或批量檢索變更變更管理管理:容器文件系統(tǒng)的變更可以提交到新的映像中,并可重復使用以創(chuàng)建更多的容器。無需使用模板或手動配置Copyright 2000-2010 ChinaNetCent
9、er.ALL Rights Reserved. | www.ChinaNetC為什么要使用為什么要使用 Docker? 作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢。 首先,Docker 容器的啟動可以在秒級實現(xiàn),這相比傳統(tǒng)的虛擬機方式要快得多。 其次,Docker 對系統(tǒng)資源的利用率很高,一臺主機上可以同時運行數(shù)千個 Docker 容器。 容器除了運行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高,同時系統(tǒng)的開銷盡量小。傳統(tǒng)虛擬機方式運行 10 個不同的應(yīng)用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應(yīng)用即可。Copyright
10、 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC更快速的交付和更快速的交付和部署部署 對開發(fā)和運維(devop)人員來說,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運行。 開發(fā)者可以使用一個標準的鏡像來構(gòu)建一套開發(fā)容器,開發(fā)完成之后,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創(chuàng)建容器,快速迭代應(yīng)用程序,并讓整個過程全程可見,使團隊中的其他成員更容易理解應(yīng)用程序是如何創(chuàng)建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節(jié)約開發(fā)、測試、部署的時間。Copyright 2000
11、-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC更高效的虛擬更高效的虛擬化化 Docker 容器的運行不需要額外的 hypervisor 支持,它是內(nèi)核級的虛擬化,因此可以實現(xiàn)更高的性能和效率。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC更輕松的遷移和更輕松的遷移和擴展擴展 Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務(wù)器等。 這種兼容性可以讓用戶把一個應(yīng)用程序從一個平臺直接遷移到另
12、外一個。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC更簡單的更簡單的管理管理 使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發(fā)和更新,從而實現(xiàn)自動化并且高效的管理。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC對比傳統(tǒng)虛擬機對比傳統(tǒng)虛擬機總結(jié)總結(jié)特性特性容器容器虛擬機虛擬機啟動秒級分鐘級硬盤使用一般為 MB一般為 GB性能接近原生弱于系統(tǒng)支持量單機支持上
13、千個容器一般幾十個Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC基本基本概念概念 Docker 包括三個基本概念 鏡像(Image) 容器(Container) 倉庫(Repository) 理解了這三個概念,就理解了 Docker 的整個生命周期。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDocker 鏡像鏡像 Docker 鏡像就是一個只讀的模板。 例如:一個鏡像可以包含一個完整的 ubuntu
14、操作系統(tǒng)環(huán)境,里面僅安裝了 Apache 或用戶需要的其它應(yīng)用程序。 鏡像可以用來創(chuàng)建 Docker 容器。 Docker 提供了一個很簡單的機制來創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶甚至可以直接從其他人那里下載一個已經(jīng)做好的鏡像來直接使用。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDocker 容器容器 Docker 利用容器來運行應(yīng)用。 容器是從鏡像創(chuàng)建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。 可以把容器看做是一個簡易版的 Linux 環(huán)境(包括roo
15、t用戶權(quán)限、進程空間、用戶空間和網(wǎng)絡(luò)空間等)和運行在其中的應(yīng)用程序。 *注:鏡像是只讀的,容器在啟動的時候創(chuàng)建一層可寫層作為最上層。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDocker 倉庫倉庫倉庫是集中存放鏡像文件的場所。有時候會把倉庫和倉庫注冊服務(wù)器(Registry)混為一談,并不嚴格區(qū)分。實際上,倉庫注冊服務(wù)器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Dock
16、er Hub,存放了數(shù)量龐大的鏡像供用戶下載。 國內(nèi)的公開倉庫包括 Docker Pool等,可以提供大陸用戶更穩(wěn)定快速的訪問。當然,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個私有倉庫。當用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC獲取獲取鏡像鏡像 #sudo docker pull ubuntu:12.04 Pulling repository ub
17、untu ab8e2728644c: Pulling dependent layers 511136ea3c5a: Download complete 5f0ffaa9455e: Download complete a300658979be: Download complete 904483ae0c30: Download complete ffdaafd1ca50: Download complete d047ae21eeaf: Download completeCopyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.Chi
18、naNetC 該命令實際上相當于 $ sudo docker pull 命令,即從注冊服務(wù)器 中的 ubuntu 倉庫來下載標記為 12.04 的鏡像。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC創(chuàng)建虛擬機 完成后,即可隨時使用該鏡像了,例如創(chuàng)建一個容器,讓其中運行 bash 應(yīng)用。 $ sudo docker run -t -i ubuntu:12.04 /bin/bash rootfe7fc4bd8fc9:/#Copyright 2000-2010 ChinaNetCenter.ALL Rig
19、hts Reserved. | www.ChinaNetC列出本地鏡像 使用 docker images 顯示本地已有的鏡像。$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MBubuntu precise 74fe38d11401 4 weeks ago 209.6 MBubuntu 14.04 99ec81b80c55 4 weeks ago 266 MBubuntu latest 99ec81b80c55 4 weeks
20、ago 266 MBubuntu trusty 99ec81b80c55 4 weeks ago 266 MBCopyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC字段信息在列出信息中,可以看到幾個字段信息來自于哪個倉庫,比如 ubuntu鏡像的標記,比如 14.04它的 ID 號(唯一)創(chuàng)建時間鏡像大小其中鏡像的 ID 唯一標識了鏡像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的鏡像 ID,說明它們實際上是同一鏡像。TAG 信息用來標記來自同一個倉庫的不同鏡像。例如 ubu
21、ntu 倉庫中有多個鏡像,通過 TAG 信息來區(qū)分發(fā)行版本,例如 10.04、12.04、12.10、13.04、14.04 等。例如下面的命令指定使用鏡像 ubuntu:14.04 來啟動一個容器。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC啟動容器 先使用下載的鏡像啟動容器。 $ sudo docker run -t -i training/sinatra /bin/bash root0b2616b0e5a8:/#在容器中添加 json 和 gem 兩個應(yīng)用。 root0b2616b0e5a8
22、:/# gem install jsonCopyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC更新鏡像 現(xiàn)在我們的容器已經(jīng)被我們改變了,使用 docker commit 命令來提交更新后的副本。 $ sudo docker commit -m Added json gem -a Docker Newbee 0b2616b0e5a8 ouruser/sinatra:v2 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1cCopyri
23、ght 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC參數(shù)說明 -m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的用戶信息;之后是用來創(chuàng)建鏡像的容器的 ID;最后指定目標鏡像的倉庫名和 tag 信息。創(chuàng)建成功后會返回這個鏡像的 ID 信息。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC移除本地鏡像 docker rmi 移除鏡像。docker rm :移除容器。 $ sudo docker rmi
24、 training/sinatra Untagged: training/sinatra:latest Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d *注意:在刪除鏡像之前要先用 docker rm 刪掉依賴于這個鏡像的所有容器。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC鏡像的實現(xiàn)鏡像的實現(xiàn)原理原理 Docker 鏡像是怎么實現(xiàn)增量的修改和維護的? 每個鏡像都由很多層次構(gòu)成,Docker 使用
25、Union FS 將這些不同的層結(jié)合到一個鏡像中去。 通常 Union FS 有兩個用途, 一方面可以實現(xiàn)不借助 LVM、RAID 將多個 disk 掛到同一個目錄下,另一個更常用的就是將一個只讀的分支和一個可寫的分支聯(lián)合在一起,Live CD 正是基于此方法可以允許在鏡像不變的基礎(chǔ)上允許用戶在其上進行一些寫操作。 Docker 在 AUFS 上構(gòu)建的容器也是利用了類似的原理。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC容器 簡單的說,容器是獨立運行的一個或一組應(yīng)用,以及它們的運行態(tài)環(huán)境。對應(yīng)的,
26、虛擬機可以理解為模擬運行的一整套操作系統(tǒng)(提供了運行態(tài)環(huán)境和其他系統(tǒng)環(huán)境)和跑在上面的應(yīng)用。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC啟動啟動容器容器 啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止狀態(tài)(stopped)的容器重新啟動。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC新建并新建并啟動啟動 例如,下面的命令輸出一個 “Hello World”,之后終止容器。 $
27、sudo docker run ubuntu:14.04 /bin/echo Hello world Hello worldCopyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC啟動容器 下面的命令則啟動一個 bash 終端,允許用戶進行交互。 $ sudo docker run -t -i ubuntu:14.04 /bin/bash rootaf8bae53bdd3:/#Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.China
28、NetC 其中,-t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上, -i 則讓容器的標準輸入保持打開。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCDocker執(zhí)行的原理 當利用 docker run 來創(chuàng)建容器時,Docker 在后臺運行的標準操作包括: 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載 利用鏡像創(chuàng)建并啟動一個容器 分配一個文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層 從宿主主機配置的網(wǎng)橋接口中橋接一個虛擬接口到容器中去 從地址池配置一個
29、ip 地址給容器 執(zhí)行用戶指定的應(yīng)用程序 執(zhí)行完畢后容器被終止Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC啟動已終止容器docker start 容器名稱容器的核心為所執(zhí)行的應(yīng)用程序,所需要的資源都是應(yīng)用程序運行所必需的。除此之外,并沒有其它的資源??梢栽趥谓K端中利用 ps 或 top 來查看進程信息。rootba267838cc1b:/# ps PID TTY TIME CMD 1 ? 00:00:00 bash 11 ? 00:00:00 psCopyright 2000-2010 China
30、NetCenter.ALL Rights Reserved. | www.ChinaNetC終止容器 可以使用 docker stop 來終止一個運行中的容器。 此外,當Docker容器中指定的應(yīng)用終結(jié)時,容器也自動終止。 例如對于上一章節(jié)中只啟動了一個終端的容器,用戶通過 exit 命令或 Ctrl+d 來退出終端時,所創(chuàng)建的容器立刻終止。 終止狀態(tài)的容器可以用 docker ps -a 命令看到。例如Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetC查看已關(guān)閉的容器 終止狀態(tài)的容器可以用 docker ps -a 命令看到。例如 docker restart 命令會將一個運行態(tài)的容器終止,然后再重新啟動它。Copyright 2000-2010 ChinaNetCenter.ALL Rights Reserved. | www.ChinaNetCattach 命令docker attach 是Docker自帶的命令。下面示例如何使用該命令。$ 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550$ s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年物業(yè)管理與維護標準操作指南
- 運用漢字部件構(gòu)字規(guī)律優(yōu)化小學識字教學的課堂管理研究教學研究課題報告
- 2025年交通運輸企業(yè)安全管理與培訓指南
- 2025年企業(yè)國際化經(jīng)營與風險管理手冊
- 企業(yè)辦公費用預算控制工具
- 我的未來想象:想象作文14篇
- 2025年物業(yè)管理標準作業(yè)流程
- 會議組織策劃模板會議管理工具
- 我的小貓咪寫物類作文8篇
- 本人信用責任聲明書9篇
- 2026四川成都九聯(lián)投資集團有限公司招聘12人筆試參考題庫及答案解析
- 北京市東城區(qū)2025-2026學年高三上學期期末考試地理 有答案
- 2025年健康體檢中心服務(wù)流程手冊
- 2026年黑龍江林業(yè)職業(yè)技術(shù)學院高職單招職業(yè)適應(yīng)性測試備考題庫有答案解析
- 2026福建能源石化集團校招面筆試題及答案
- 華東理工大學2026年公開招聘工作人員46名備考題庫及參考答案詳解
- 云南師大附中2026屆高三高考適應(yīng)性月考卷(六)歷史試卷(含答案及解析)
- 2026廣東韶關(guān)市公安局武江分局招聘警務(wù)輔助人員13人(第一次)筆試備考試題及答案解析
- 2025桐梓縣國土空間規(guī)劃城市年度體檢報告成果稿
- 消渴?。? 型糖尿?。┲嗅t(yī)護理方案
- 2026年內(nèi)蒙古化工職業(yè)學院單招職業(yè)適應(yīng)性測試參考題庫及答案解析
評論
0/150
提交評論