《云計(jì)算虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件第九章 容器虛擬化技術(shù)基礎(chǔ)_第1頁
《云計(jì)算虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件第九章 容器虛擬化技術(shù)基礎(chǔ)_第2頁
《云計(jì)算虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件第九章 容器虛擬化技術(shù)基礎(chǔ)_第3頁
《云計(jì)算虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件第九章 容器虛擬化技術(shù)基礎(chǔ)_第4頁
《云計(jì)算虛擬化技術(shù)基礎(chǔ)與實(shí)踐》課件第九章 容器虛擬化技術(shù)基礎(chǔ)_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本章重點(diǎn)了解容器虛擬化的基本原理。掌握Docker安裝與部署過程。掌握Docker倉庫搭建過程。掌握Docker鏡像、Docker容器、Docker網(wǎng)絡(luò)連接的基本原理和具體操作。容器虛擬化概述容器技術(shù)前世今生容器基本原理Docker起源及架構(gòu)01容器虛擬化概述容器虛擬化提供了一種運(yùn)行時環(huán)境,隔離了上層應(yīng)用與下層操作系統(tǒng)、硬件的關(guān)聯(lián),便于更加高效的構(gòu)建應(yīng)用,也易于管理維護(hù)。在傳統(tǒng)的軟件行業(yè)中,開發(fā)人員的主要工作是應(yīng)用程序的編碼、構(gòu)建、測試和發(fā)布,涉及應(yīng)用程序和運(yùn)行時平臺這兩層。而運(yùn)維人員的工作則涉及從硬件、操作系統(tǒng)到運(yùn)行時平臺的安裝、配置、運(yùn)行監(jiān)控、升級和優(yōu)化等工作。在現(xiàn)代計(jì)算機(jī)技術(shù)中,容器技術(shù)就是將應(yīng)用程序打包到每一個單獨(dú)的容器之中,通過這個封裝的過程,將每個應(yīng)用程序進(jìn)行隔離,打斷應(yīng)用程序之前的依賴與連接關(guān)系。一個龐大的服務(wù)系統(tǒng)在容器技術(shù)的支持下,可以由許多不同的應(yīng)用程序所寄居的容器組合而成,這種拆解再組合的過程,讓應(yīng)用程序之間的耦合度降到最低。1.容器技術(shù)前世今生最早的容器技術(shù)始于1979年提出的UNIXchroot,它最初是一個UNIX操作系統(tǒng)的系統(tǒng)調(diào)用,用于將一個進(jìn)程及其子進(jìn)程的根目錄改變到文件系統(tǒng)中的一個新位置,讓這些進(jìn)程只能訪問這個新的位置,從而達(dá)到了進(jìn)程隔離的目的。2000年,R&DAssociates公司為FreeBSD引入了一個類似于chroot的容器技術(shù),名叫Jails。與chroot不同的是,它為文件系統(tǒng)、用戶和網(wǎng)絡(luò)等的隔離增加了進(jìn)程沙盒功能。這是最早期,也是功能最多的容器技術(shù)。2008年,推出了LinuxContainer(簡稱為LXC),它是基于Cgroups和Linux命名空間Namespace推出了第一個最完善的Linux容器。2013年,dotcloud公司推出到現(xiàn)在為止最為流行和使用最廣泛的容器Docker。2.容器基本原理容器本質(zhì)就是宿主機(jī)上的一個進(jìn)程,它的核心技術(shù)是Namespace和Cgroups。容器技術(shù)通過Namespace實(shí)現(xiàn)資源隔離,確保一個容器中運(yùn)行的進(jìn)程只會感知容器內(nèi)進(jìn)程的變化,不能影響容器外的其他進(jìn)程,同時也不會被容器外的其他進(jìn)程所影響。通過Cgroups實(shí)現(xiàn)資源控制,可以用于進(jìn)行資源的核算和限制。通過rootfs(RootFileSystem,根文件系統(tǒng),簡稱為rootfs)實(shí)現(xiàn)文件系統(tǒng)隔離,再加上容器引擎自身的特性來管理容器的生命周期。2.容器基本原理1.Namespace資源隔離一個完整的容器需要做到六種基本隔離,也就是Linux內(nèi)核需要提供六種Namespace隔離.Namespace隔離內(nèi)容Mount文件系統(tǒng)Network網(wǎng)絡(luò)資源IPC信號量、消息隊(duì)列和共享內(nèi)存PID進(jìn)程號UTS主機(jī)和域名User用戶和用戶組2.容器基本原理1.Namespace資源隔離NamespaceAPI的主要操作主要包括clone()、setns()以及unshare()。1)使用clone()函數(shù)在創(chuàng)建進(jìn)程的同時創(chuàng)建新的Namespace2)使用setns()加入一個已經(jīng)存在的Namespace3)使用unshare()在原先進(jìn)程上進(jìn)行Namespace隔離2.容器基本原理2.Cgroups資源隔離Cgroups用來限制、控制和分離一個進(jìn)程組群的資源,如CPU、內(nèi)存、I/O等。Cgroups是Linux內(nèi)核提供的一種機(jī)制,這種機(jī)制可以根據(jù)需求把一系列系統(tǒng)任務(wù)及子任務(wù)整合到按資源劃分等級的不同組內(nèi),從而為系統(tǒng)的資源管理提供一個統(tǒng)一的框架。Cgroups的主要功能:ResourceLimitation:Cgroups可以對任務(wù)使用的資源進(jìn)行限制,比如設(shè)置內(nèi)存使用上限以及限制文件系統(tǒng)的緩存等。Prioritization:Cgroups可以通過分配CPU時間片個數(shù)和磁盤I/O寬帶大小來控制優(yōu)先級。Accounting:Cgroups可以統(tǒng)計(jì)系統(tǒng)的資源使用量,主要目的是為了計(jì)費(fèi)。Control:Cgroups可以進(jìn)行掛起進(jìn)程或恢復(fù)進(jìn)程等操作。2.容器基本原理2.Cgroups資源隔離查看Linux內(nèi)核中是否啟用了Cgroups第一步,查看linux的內(nèi)核版本號。第二步,查看內(nèi)核版本對應(yīng)的配置文件(對應(yīng)的Cgroups的配置值為y,表示已經(jīng)啟用)。第三步,查看Cgroups是否掛載成功(掛載成功,就會在/sys/fs/cgroup目錄下看到相應(yīng)文件)。[root@localhost~]#uname–r[root@localhost~]#cat/boot/config-3.10.0-1160.15.2.el7.x86_64|grepCGROUP[root@localhost~]#mount-tcgroup3.Docker起源及架構(gòu)2010年,幾個大胡子年輕人在美國舊金山成立了一家做PaaS平臺的公司,起名為dotCloud。dotCloud主要是基于PaaS平臺為開發(fā)者或開發(fā)商提供相應(yīng)的技術(shù)服務(wù),具體來說,是和LXC(Linux容器虛擬技術(shù))有關(guān)的容器技術(shù)。后來,dotCloud公司將自己的容器技術(shù)進(jìn)行了簡化和標(biāo)準(zhǔn)化,并命名為Docker。2013年3月,dotCloud公司的創(chuàng)始人之一,Docker之父,28歲的SolomonHykes正式?jīng)Q定將Docker項(xiàng)目開源。IT工程師發(fā)現(xiàn)了Docker的優(yōu)點(diǎn),然后蜂擁而至,加入Docker開源社區(qū)。Docker開源后,迅速成為GitHub上最熱門的項(xiàng)目。開源當(dāng)月,Docker0.1版本發(fā)布,此后的每一個月,Docker都會發(fā)布一個版本。到2014年6月9日,Docker1.0版本正式發(fā)布。Docker是基于容器技術(shù)的輕量級虛擬化解決方案,利用Docker,開發(fā)者可以將應(yīng)用及其依賴包打包到一個容器中,進(jìn)行發(fā)布。3.Docker起源及架構(gòu)Docker并沒有和虛擬機(jī)一樣利用一個完全獨(dú)立的GuestOS實(shí)現(xiàn)環(huán)境隔離,它利用的是目前Linux內(nèi)核本身支持的容器方式實(shí)現(xiàn)資源和環(huán)境隔離。虛擬機(jī)技術(shù)和容器技術(shù)對比3.Docker起源及架構(gòu)與虛擬機(jī)技術(shù)相比較,Docker容器技術(shù)有很多的優(yōu)勢:虛擬機(jī)技術(shù)和容器技術(shù)對比

虛擬機(jī)技術(shù)容器技術(shù)磁盤占用情況非常大,甚至上GB很小,甚至幾十KB啟動速度很慢,常常需要幾分鐘很快,一般只需幾秒鐘運(yùn)行形態(tài)運(yùn)行在Hypervisor上直接運(yùn)行于宿主機(jī)的內(nèi)核上,不同容器共享同一個Linux內(nèi)核上并發(fā)性最多幾十個虛擬機(jī)可以同時啟動成百上千個容器性能比宿主機(jī)差接近于宿主機(jī)本地進(jìn)程資源利用率低高3.Docker起源及架構(gòu)Docker是C/S(客戶端Client-服務(wù)器Server)架構(gòu)模式。DockerClient客戶端和daemon守護(hù)進(jìn)程。Docker鏡像是用于創(chuàng)建Docker容器的模板,是Docker容器啟動的基礎(chǔ)。DockerContainer容器是一個基于Docker鏡像創(chuàng)建,包含運(yùn)行某一特定程序所需要的OS、軟件、配置文件和數(shù)據(jù),可以一直運(yùn)行的單元。DockerRegistry倉庫主要用來保存鏡像文件。Docker的基本架構(gòu)3.Docker起源及架構(gòu)要啟動一個新的Docker應(yīng)用A,它的大致工作流程:Docker工作流程Docker安裝與部署Docker安裝鏡像加速02Docker安裝與部署到目前為止,Docker已經(jīng)原生支持幾乎所有的Linux、Windows、MacOS三大平臺和主流的云平臺(AmazonEC2,GoogleCloudPlatform,RackspaceCloud和阿里云等)。Docker的安裝指的是DockerEngine的安裝,即Docker中核心的容器處理部分。準(zhǔn)備工作:Docker只能安裝在64位計(jì)算機(jī)上。對于Linux系統(tǒng),內(nèi)核版本必須大于3.10,如果小于3.10則會因?yàn)槿鄙貲ocker容器運(yùn)行時所需要的功能而出錯。1.Docker安裝1.將yum包更新到最新。2.安裝所需的軟件包yum-utils、device-mapper-persistent-data和lvm2。3.設(shè)置倉庫(使用阿里云的源地址)。4.安裝最新版本的DockerCE,或轉(zhuǎn)到下一步安裝特定版本。6.啟動docker,并設(shè)置為開機(jī)啟動。7.運(yùn)行“dockerrunhello-world”命令,驗(yàn)證是否正確安裝DockerCE。[root@localhost~]#yumupdate[root@localhost~]#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2[root@localhost~]#yum-config-manager\>--add-repo\>/docker-ce/linux/centos/docker-ce.repo[root@localhost~]#yuminstalldocker-ce[root@localhost~]#systemctlstartdocker[root@localhost~]#systemctlenabledocker[root@localhost~]#dockerrunhello-world2.鏡像加速由于Docker服務(wù)器在國外,有時在國內(nèi)無法正常拉取鏡像。為了解決這個問題,可以為Docker設(shè)置國內(nèi)的鏡像加速器。國內(nèi)Docker鏡像加速的組織有很多,在本節(jié)以阿里云為例,參考阿里云的官方操作文檔進(jìn)行設(shè)置。[root@localhost~]#sudomkdir-p/etc/docker[root@localhost~]#sudotee/etc/docker/daemon.json<<-'EOF'>{>"registry-mirrors":["https://******."]>}EOF[root@localhost~]#sudosystemctldaemon-reload[root@localhost~]#sudosystemctlrestartdockerDocker鏡像Docker鏡像基礎(chǔ)構(gòu)建鏡像查看鏡像分發(fā)鏡像搜索鏡像鏡像其他操作031.Docker鏡像基礎(chǔ)Docker鏡像類似于虛擬機(jī)的鏡像,是一個只讀的Docker容器模板。它是采用聯(lián)合掛載技術(shù)實(shí)現(xiàn)的一個層疊式的文件系統(tǒng)。鏡像中含有啟動Docker容器所需的文件系統(tǒng)結(jié)構(gòu)和內(nèi)容,是容器構(gòu)建的基石。registry主要用來保存Docker鏡像,包括鏡像層次結(jié)構(gòu)和關(guān)于鏡像的元數(shù)據(jù)。repository是具有某個功能的Docker鏡像的所有迭代版本構(gòu)成的鏡像組。manifest(描述文件)主要存在于registry中作為Docker鏡像的元數(shù)據(jù)文件,在pull、push、save和load過程中作為鏡像結(jié)構(gòu)和基礎(chǔ)信息的描述文件。image用來存儲一組鏡像相關(guān)的元數(shù)據(jù)信息。layer是一個Docker用來管理鏡像層的中間概念,鏡像是鏡像層組成的,而單個鏡像層可以被多個鏡像共享。1.Docker鏡像基礎(chǔ)registry是repository的集合repository是image的集合image是由多個layer組成的一個layer也可以被多個鏡像所共享Docker鏡像關(guān)鍵概念關(guān)系圖1.Docker鏡像基礎(chǔ)Docker鏡像的主要特點(diǎn):分層:采用分層方式構(gòu)建,每一個鏡像都由一系列的鏡像層組成。寫時復(fù)制:采用寫時復(fù)制策略,多個容器間共享鏡像,所有鏡像層都以只讀方式掛載到一個掛載點(diǎn),上面附加一個可讀寫層。當(dāng)需要修改鏡像的文件時,只對最上方的讀寫層進(jìn)行改動,不覆蓋下層已有文件系統(tǒng)的內(nèi)容。聯(lián)合掛載:聯(lián)合掛載可以在一個掛載點(diǎn)同時掛載多個文件系統(tǒng),將掛載點(diǎn)的原目錄與被掛載內(nèi)容進(jìn)行整合,最終可見的文件系統(tǒng)將會包含整合之后的各層文件和目錄。1.Docker鏡像基礎(chǔ)假設(shè)某一個鏡像一共有兩層,第一層有三個文件夾,第二層有兩個文件夾,使用聯(lián)合掛載技術(shù)疊加后,從內(nèi)核角度能夠顯式區(qū)分開兩個層次,但是從用戶的角度來看,只可以看到五個文件夾,感覺不到分層的存在。從用戶的角度查看分層文件系統(tǒng)2.構(gòu)建鏡像鏡像的構(gòu)建是Docker工作流程的第一步,有了鏡像才能運(yùn)行容器。構(gòu)建一個Docker鏡像的常見方法有兩種,一種是通過命令“dockercommit”構(gòu)建鏡像,一種是通過Dockerfile文件構(gòu)建鏡像。2.構(gòu)建鏡像1.使用dockercommit命令構(gòu)建鏡像舉例說明:通過鏡像centos:7啟動一個容器,在容器中新建一個1.txt文件,內(nèi)容為“Thisisatest”,用dockercommit命令提交新容器為鏡像。1)下載鏡像centos:7,并利用鏡像來啟動一個交互式容器commit_test。2)在容器中新建一個1.txt文件,內(nèi)容為“Thisisatest”,然后退出容器。[root@localhost~]#dockerpullcentos:7[root@5f29ebd5c1ac/]#echo"Thisisatest">1.txt[root@5f29ebd5c1ac/]#exit2.構(gòu)建鏡像1.使用dockercommit命令構(gòu)建鏡像舉例說明:通過鏡像centos:7啟動一個容器,在容器中新建一個1.txt文件,內(nèi)容為“Thisisatest”,用dockercommit命令提交新容器為鏡像。3)把容器commit_test提交為鏡像commit_image1,設(shè)置鏡像作者為catherine,提交修改的內(nèi)容1.txt。4)使用剛創(chuàng)建的鏡像commit_image1啟動一個新容器commit_test1,并查看容器內(nèi)部是否有1.txt文件。[root@localhost~]#dockercommit-a‘catherine’-m‘1.txt’commit_testcommit_image1[root@localhost~]#dockerrun-it--namecommit_test1commit_image1/bin/bash[root@9840a77224f1/]#cat1.txtThisisatest2.構(gòu)建鏡像2.通過Dockerfile文件構(gòu)建鏡像舉例說明:通過鏡像centos:7啟動一個容器,在容器中新建一個2.txt文件,內(nèi)容為“Thisisatest2”,用Dockerfile文件提交新容器為鏡像。1)新建并編寫Dockerfile文件。2)使用剛編寫的Dockerfile文件,使用dockerbuild命令構(gòu)建鏡像commit_image2。3)使用剛創(chuàng)建的鏡像commit_image2啟動一個新容器commit_test2,并查看容器內(nèi)的2.txt文件。[root@localhost~]#viDockerfile#FirstDockerfileFROMcentos:7MAINTAINERcatherine3********@RUNecho"Thisisatest2">2.txt[root@localhost~]#dockerbuild-tcommit_image2[root@localhost~]#dockerrun-it--namecommit_test2commit_image2/bin/bash[root@13be03635c87/]#cat2.txtThisisatest23.查看鏡像在實(shí)際過程中,經(jīng)常需要查看鏡像相關(guān)信息??梢允褂胐ockerimages命令查看鏡像名稱、標(biāo)簽、ID號、創(chuàng)建時間和大小等簡單信息。列出包含中間層的所有鏡像。列出鏡像名為ubuntu的鏡像id。用dockerinspect查看鏡像hello-world詳細(xì)信息。查看hello-world鏡像的創(chuàng)建時間。[root@localhost~]#dockerimages–a[root@localhost~]#dockerimages-qubuntu[root@localhost~]#dockerinspecthello-world[root@localhost~]#dockerinspect-f'鏡像創(chuàng)建時間是:{{.Created}}'hello-world4.分發(fā)鏡像Docker技術(shù)的目的就是為了在不同機(jī)器上創(chuàng)建無差別的應(yīng)用環(huán)境,使一個機(jī)器上的容器遷移到另一臺機(jī)器上更加容易??梢圆捎萌萜鬟w移命令來實(shí)現(xiàn),也可以采用鏡像分發(fā)的方式來實(shí)現(xiàn)。能夠進(jìn)行鏡像分發(fā)的命令有很多,包括dockerpull和dockerpush,dockersave和dockerload。dockerpull和dockerpush通過線上DockerHub的方式遷移。dockersave和dockerload通過線下包分發(fā)的方式進(jìn)行遷移。4.分發(fā)鏡像1.dockerpull命令Docker提供了非常方便的拉取指令,通過dockerpull命令可以拉取各個鏡像倉庫的鏡像。從官方倉庫DockerHub中拉取鏡像ubuntu:16.04。如果想從本地私有鏡像倉庫中拉取鏡像ubuntu:16.04,可以指定倉庫地址和端口號。[root@localhost~]#dockerpullubuntu:16.04[root@localhost~]#dockerpulllocalhost:5000ubuntu:16.044.分發(fā)鏡像2.dockerpush命令當(dāng)用戶制作了鏡像后,希望將其上傳到倉庫中,此時可以通過dockerpush命令完成該操作。DockerHub是Docker官方默認(rèn)倉庫,如果讀者想要把鏡像發(fā)布到官方默認(rèn)倉庫,在使用push命令之前,需要先在DockerHub鏡像倉庫中注冊賬戶并登錄。將鏡像commit_image1發(fā)布到DockerHub上:1)在終端使用dockerlogin命令登錄DockerHub倉庫。2)在推送鏡像之前需要先給鏡像打上標(biāo)簽為147258369abc/commit_image1。3)使用dockerpush命令將鏡像推送到鏡像倉庫中。[root@localhost~]#dockerlogin[centos@localhost~]$dockertagcommit_image1147258369abc/commit_image1[root@localhost~]#dockerpush147258369abc/commit_image14.分發(fā)鏡像3.dockersave命令若要將某一個鏡像文件保存在本地文件系統(tǒng)時,可以使用dockersave命令。將鏡像centos:7保存為centos7.tar文檔。使用“>”符號導(dǎo)出鏡像。[root@localhost~]#dockersave-ocentos7.tarcentos:7[root@localhost~]#llcentos7.tar[root@localhost~]#dockersavecentos:7>centos7.tar4.分發(fā)鏡像4.dockerload命令使用dockerload命令可以加載導(dǎo)出的鏡像包到本地倉庫中。將使用dockersave命令生成的centos7.tar文檔導(dǎo)入到本地倉庫中。1)查看本地鏡像倉庫,確認(rèn)沒有centos:7鏡像。2)使用dockerload命令將tar包導(dǎo)入到本地鏡像倉庫。3)再次查看本地鏡像倉庫,確認(rèn)centos:7鏡像包被導(dǎo)入成功。也可以使用“<”符號導(dǎo)入鏡像。[root@localhost~]#dockerimages[root@localhost~]#dockerload-icentos7.tar[root@localhost~]#dockerimages[root@localhost~]#dockerload<centos7.tar5.搜索鏡像常見的鏡像搜索方式有兩種,第一種是通過dockersearch命令行方式搜索,第二種是直接在DockerHub官方網(wǎng)站上直接搜索。從DockerHub查找所有鏡像名包含centos,并且收藏?cái)?shù)大于20的鏡像。在DockerHub網(wǎng)站上直接搜索centos。[root@localhost~]#dockersearch-fstars=20centos6.鏡像其他操作刪除鏡像一般使用命令dockerrmi刪除鏡像文件ubuntu:14.04。刪除一個正在被使用的鏡像文件ubuntu:16.04。dockerhistory可以用來查看指定鏡像的創(chuàng)建歷史。查看鏡像文件centos:7的歷史。[root@localhost~]#dockerhistorycentos:7[root@localhost~]#dockerrmiubuntu:14.04[root@localhost~]#dockerrmi-fubuntu:16.04Docker倉庫Docker倉庫簡介Registry私有倉庫的搭建與使用041.Docker倉庫簡介Docker倉庫是用來保存鏡像的位置,Docker提供一個注冊服務(wù)器Registry來保存多個倉庫Repository。Docker倉庫可以很方便的進(jìn)行鏡像的存儲、分發(fā)和更新等管理操作。一般來說,倉庫有以下幾種:DockerHub:當(dāng)前最大的Docker鏡像倉庫,也是官方鏡像倉庫。內(nèi)部私有鏡像倉庫:用戶在內(nèi)部創(chuàng)建的私有倉庫。在本地局域網(wǎng)搭建,類似公共倉庫。第三方鏡像倉庫:第三方公司設(shè)置的鏡像倉庫。1.Docker倉庫簡介在DockerHub官方鏡像倉庫中注冊賬號,并使用。DockerHub的注冊界面填寫DockerID,Email,Password等信息,并點(diǎn)擊SignUp。1.Docker倉庫簡介在DockerHub官方鏡像倉庫中注冊賬號,并使用。登錄成功后,即可進(jìn)入DockerHub官網(wǎng)的個人頁面。在創(chuàng)建Repository時,設(shè)置名為ubuntu。之后就可以把ubuntu相關(guān)的鏡像推送到此處。2.Registry私有倉庫的搭建和使用在實(shí)際應(yīng)用中,除了使用DockerHub可以共享鏡像倉庫,還可以自己搭建私有的鏡像倉庫。在企業(yè)中,為了避免商業(yè)項(xiàng)目被暴露,一般選擇部署自己的私有鏡像倉庫。以下以兩個節(jié)點(diǎn)為例給出部署私有鏡像倉庫的步驟:環(huán)境:準(zhǔn)備兩臺安裝好Docker的服務(wù)器。服務(wù)器端機(jī)器:Docker私有倉庫服務(wù)器,運(yùn)行Registry容器;客戶端機(jī)器:已經(jīng)安裝Docker的普通服務(wù)器,在這臺服務(wù)器上下載一個測試鏡像,然后上傳到Registry服務(wù)器進(jìn)行測試。2.Registry私有倉庫的搭建和使用服務(wù)器端操作:1)在私有倉庫服務(wù)器上快速創(chuàng)建鏡像倉庫。2)使用dockerps-l命令查看容器情況。3)查看剛剛創(chuàng)建的鏡像倉庫中是否有鏡像文件。4)查看本服務(wù)器的IP地址。[root@localhost~]#dockerrun-d-p5000:5000--restart=always--nameregistry1registry:latest[root@localhost~]#dockerps-l[root@localhost~]#curl:5000/v2/_catalog[root@localhost~]#ifconfig2.Registry私有倉庫的搭建和使用客戶端操作:1)在客戶端機(jī)器上下載一個nginx:latest鏡像,并標(biāo)記為私有倉庫的版本。2)在客戶端配置私有倉庫的可信任設(shè)置,以便可以通過HTTP直接訪問。3)將剛剛標(biāo)記的鏡像推送到私有倉庫中。4)在服務(wù)器端查看倉庫中的鏡像列表。[root@localhost~]#dockerpullnginx:latest[root@localhost~]#vi/etc/docker/daemon.json{"insecure-registries":["03:5000"]//服務(wù)器的IP和端口}[root@localhost~]#systemctlrestartdocker[root@localhost~]#dockerpush03:5000/nginx:latest[root@localhost~]#curl:5000/v2/_catalog{"repositories":["nginx"]}Docker容器Docker容器基礎(chǔ)創(chuàng)建與啟動容器查看容器分發(fā)容器進(jìn)入容器內(nèi)部容器其他操作051.Docker容器基礎(chǔ)Docker容器是基于鏡像運(yùn)行的一個輕量級的環(huán)境??梢园袲ocker容器簡單理解為在沙盒中運(yùn)行的進(jìn)程。這個沙盒包含了該進(jìn)程運(yùn)行所必須的資源,包括文件系統(tǒng)、系統(tǒng)類庫和SHELL環(huán)境等,但這個沙盒默認(rèn)不會運(yùn)行任何程序。用戶需要在沙盒中運(yùn)行一個進(jìn)程來啟動某一個容器,這個進(jìn)程是該容器的唯一進(jìn)程。Docker容器有以下兩種運(yùn)行態(tài):前臺交互式:容器運(yùn)行在前臺。后臺守護(hù)式:容器運(yùn)行在后臺。2.創(chuàng)建與啟動容器使用dockercreate命令可以新建一個容器,但容器并未啟動。使用centos:7鏡像創(chuàng)建一個容器。啟動將剛剛創(chuàng)建的容器create1。[root@localhost~]#dockercreate--namecreate1-itcentos:7[root@localhost~]#dockerstartcreate12.創(chuàng)建與啟動容器原來沒有這個容器,需要基于一個鏡像啟動新的容器,此時使用dockerrun命令。使用鏡像文件centos:7創(chuàng)建一個交互式容器,并查看容器當(dāng)前目錄。使用鏡像文件ubuntu:16.04啟動一個后臺守護(hù)式容器,讓其在后臺一直輸出hellodocker。1.啟動后臺守護(hù)式容器dowhile1。2.使用dockerps命令查看容器的狀態(tài)。3.使用dockerlogs命令查看容器的日志信息。[root@localhost~]#dockerrun--namedowhile1-dcentos:7/bin/bash-c"whiletrue;doechohellodocker;sleep1;done;“[root@localhost~]#dockerps-l[root@localhost~]#dockerlogsdowhile1[root@localhost~]#dockerrun-itcentos:7/bin/bash3.查看容器查看容器的信息,除了可以使用dockerinspect之外,還可以用dockerps命令。列出當(dāng)前所有正在運(yùn)行的容器。列出最近創(chuàng)建的一個容器。列出最近創(chuàng)建的5個容器信息。[root@localhost~]#dockerps[root@localhost~]#dockerps-l[root@localhost~]#dockerps-n54.分發(fā)容器容器可以導(dǎo)出、導(dǎo)入,dockerexport和dockerimport則是容器的導(dǎo)出導(dǎo)入命令。容器導(dǎo)出命令容器導(dǎo)出是指導(dǎo)出一個已經(jīng)創(chuàng)建的容器到一個文件,不管此時這個容器是否處于運(yùn)行狀態(tài),可以使用dockerexport命令。將容器exec1導(dǎo)出為一個文件1.tar。容器導(dǎo)入命令容器導(dǎo)入是指使用dockerimport命令將文件導(dǎo)入到本地倉庫成為鏡像,啟動鏡像就可以恢復(fù)容器。將剛剛創(chuàng)建的文件1.tar導(dǎo)入到本地鏡像倉庫,名為import1。[root@localhost~]#dockerimport1.tarimport1[root@localhost~]#dockerexportexec1-o1.tar5.進(jìn)入容器內(nèi)部1.dockerattach命令dockerattach可以attach到一個已經(jīng)運(yùn)行的容器的stdin,然后進(jìn)行命令執(zhí)行的動作。1)以交互方式運(yùn)行一個容器attach1,使用ls命令查看容器當(dāng)前目錄下的內(nèi)容,然后用ctrl+P+Q來退出但是不結(jié)束交互式容器。2)使用ps命令查看容器的狀態(tài)是否是正在運(yùn)行。3)使用dockerattach加上容器的id號或名字,再次進(jìn)入容器。[root@localhost~]#dockerrun--nameattach1-itcentos:7/bin/bash[root@localhost~]#dockerps–l[root@localhost~]#dockerattachattach15.進(jìn)入容器內(nèi)部2.dockerexec命令利用dockerexec命令也可以進(jìn)入一個已經(jīng)運(yùn)行的容器,然后進(jìn)行命令執(zhí)行的動作。1)以守護(hù)式方式運(yùn)行一個容器exec1。2)使用ps命令查看容器的狀態(tài),使用logs命令查看容器的日志。3)使用dockerexec加上容器的ID號或名字,以交互方式進(jìn)入容器。[root@localhost~]#dockerrun--nameexec1-dcentos:7/bin/bash-c"whiletrue;doechohellodocker;sleep1;done;"[root@localhost~]#dockerps-l[root@localhost~]#dockerlogsexec1[root@localhost~]#dockerexec-itexec1/bin/bash6.容器其他操作容器停止:指停止一個正在運(yùn)行的容器。停止一個正在運(yùn)行的容器exec1。[root@localhost~]#dockerkillexec1[root@localhost~]#dockerstopexec1容器殺死:是指快速停止一個容器,類似于強(qiáng)制結(jié)束。殺死一個正在運(yùn)行的容器exec1。容器刪除:容器的刪除是指刪除一個或多個容器。用-f選項(xiàng)來強(qiáng)制刪除一個正在運(yùn)行的容器exec1。刪除容器exec1,并刪除容器掛載的數(shù)據(jù)卷。[root@localhost~]#dockerrm-fexec1[root@localhost~]#dockerrm-vexec1Docker網(wǎng)絡(luò)Docker網(wǎng)絡(luò)基礎(chǔ)Docker網(wǎng)絡(luò)模式Bridge模式下容器間互連Bridge模式下容器與外部網(wǎng)絡(luò)連接061.Docker網(wǎng)絡(luò)基礎(chǔ)Docker默認(rèn)網(wǎng)絡(luò)主要是由NetworkNamespaces、VethPair、LinuxBridge和Iptables技術(shù)等來實(shí)現(xiàn)的。NetworkNamespaces:實(shí)現(xiàn)了網(wǎng)絡(luò)隔離。VethPair:打穿了隔離環(huán)境中的網(wǎng)絡(luò)數(shù)據(jù)傳輸通道。LinuxBridge:宿主機(jī)上的網(wǎng)橋,用于在容器之間進(jìn)行數(shù)據(jù)的轉(zhuǎn)發(fā)。Iptables:提供網(wǎng)絡(luò)數(shù)據(jù)穿透等功能,也可以利用它實(shí)現(xiàn)網(wǎng)絡(luò)防火墻等功能。Docker守護(hù)進(jìn)程通過docker0為容器提供網(wǎng)絡(luò)服務(wù)。docker0是Linux的虛擬網(wǎng)橋,是數(shù)據(jù)鏈路層的設(shè)備。默認(rèn)情況下容器是無法與外部通信互聯(lián)的,需要在創(chuàng)建容器時加上相應(yīng)的參數(shù)實(shí)現(xiàn)端口映射,這就是dockerrun的-p參數(shù)。1.Docker網(wǎng)絡(luò)基礎(chǔ)啟動一個nginx服務(wù),將宿主機(jī)的端口8000映射到容器內(nèi)部80端口??梢栽谒拗鳈C(jī)瀏覽器上訪問:8000[root@localhost~]#dockerrun-d-p8000:80--nametest1nginx:alpine2.Docker網(wǎng)絡(luò)模式Docker主要有以下四種網(wǎng)絡(luò)模型:1.Host:刪除容器和Docker主機(jī)之間的網(wǎng)絡(luò)隔離,并直接使用主機(jī)的網(wǎng)絡(luò)。2.None:禁用所有網(wǎng)絡(luò)。3.Joined:處于這個模式下的Docker容器會共享其它容器的網(wǎng)絡(luò)環(huán)境,因此,至少這兩個容器之間不存在網(wǎng)絡(luò)隔離,而這兩個容器又與宿主機(jī)以及除此之外其他的容器存在網(wǎng)絡(luò)隔離。4.Bridge:默認(rèn)網(wǎng)絡(luò)驅(qū)動程序。當(dāng)你的應(yīng)用程序在需要通信的容器中運(yùn)行時,通常會使用橋接網(wǎng)絡(luò)。Docker內(nèi)置bridge、host和none三個網(wǎng)絡(luò)。2.Docker網(wǎng)絡(luò)模式1.Host模式Host模式?jīng)]有為容器創(chuàng)建一個隔離的網(wǎng)絡(luò)環(huán)境,該模式下的Docker容器會和宿主機(jī)共享同一個網(wǎng)絡(luò)Namespace。創(chuàng)建一個網(wǎng)絡(luò)模式為host的容器。1)創(chuàng)建網(wǎng)絡(luò)模式為Host的容器b1。2)在容器b1內(nèi)部用ifconfig查看網(wǎng)絡(luò)狀況。[root@localhost~]#dockerrun--nameb1--networkhost-it--rmbusybox/#ifconfig2.Docker網(wǎng)絡(luò)模式1.Host模式創(chuàng)建一個網(wǎng)絡(luò)模式為host的容器。3)在容器內(nèi)部,在/tmp目錄下新建文件index.html,并寫入數(shù)據(jù)。啟動httpd,并查看相應(yīng)端口。4)在宿主機(jī)瀏覽器上,查看index.html。/#echo"Thisisatest.">/tmp/index.html/#httpd-h/tmp//#netstat-nat|grep80tcp03205:5348010:443LAST_ACKtcp00:::80:::*LISTEN2.Docker網(wǎng)絡(luò)模式2.None模式當(dāng)網(wǎng)絡(luò)模式為None模式時,表示Docker容器擁有自己的NetworkNamespace,但并未對Docker容器進(jìn)行任何網(wǎng)絡(luò)配置。創(chuàng)建一個網(wǎng)絡(luò)模式為None的容器b2,并查看網(wǎng)絡(luò)狀況。[root@localhost~]#dockerrun-it--nameb2--networknone--rmbusybox/#ifconfig2.Docker網(wǎng)絡(luò)模式3.Joined模式Joined模式指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個NetworkNamespace。創(chuàng)建一個網(wǎng)絡(luò)模式為Joined的容器,并查看網(wǎng)絡(luò)狀況。1)創(chuàng)建一個容器b3,用hostname查看主機(jī)名,ip命令查看網(wǎng)絡(luò)情況。2)創(chuàng)建一個Joined模式的容器b4,與b3共享網(wǎng)絡(luò)情況,用hostname查看主機(jī)名,ip命令查看網(wǎng)絡(luò)情況,發(fā)現(xiàn)容器b4的主機(jī)名和網(wǎng)絡(luò)狀況與b3一致。[root@localhost~]#dockerrun--nameb3-it--rmbusybox/#hostname449ea8bd730b/#ipa[root@localhost~]#dockerrun--nameb4-it--networkcontainer:b3--rmbusybox/#hostname449ea8bd730b/#ipa2.Docker網(wǎng)絡(luò)模式3.Joined模式創(chuàng)建一個網(wǎng)絡(luò)模式為Joined的容器,并查看網(wǎng)絡(luò)狀況。3)在容器b3內(nèi)部,在/tmp目錄下新建文件index.html,并寫入數(shù)據(jù),啟動httpd。4)在容器b4上訪問本地接口lo,可以正常訪問。5)在容器b3上新建一個目錄。6)在容器b4上訪問目錄,不成功。/#echo"Thisisatest.">/tmp/index.html/#httpd-h/tmp//#wget-O--q/#mkdir/tmp/test/#mkdir/tmp/test2.Docker網(wǎng)絡(luò)模式4.Bridge模式Bridge模式是Docker的默認(rèn)網(wǎng)絡(luò)模式,不寫--net參數(shù),就是Bridge模式。容器創(chuàng)建時,在主機(jī)上創(chuàng)建一對虛擬網(wǎng)卡vethpair設(shè)備,Docker將vethpair設(shè)備的一端放在新創(chuàng)建的容器中,命名為eth0(容器的網(wǎng)卡),另一端放在宿主機(jī)中,命名為veth***,并將這個網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中。2.Docker網(wǎng)絡(luò)模式4.Bridge模式創(chuàng)建一個Bridge模式容器,在宿主機(jī)上和容器內(nèi)部查看網(wǎng)絡(luò)接口情況。1)安裝網(wǎng)橋管理工具。2)查看網(wǎng)橋設(shè)備docker0,此時沒有相應(yīng)的網(wǎng)絡(luò)接口。3)開啟一個交互式容器b5。4)進(jìn)入容器內(nèi)部,使用ifconfig命令查看Docker網(wǎng)絡(luò)情況。5)用Ctrl+p+q退出容器但是保持容器的繼續(xù)運(yùn)行,并在宿主機(jī)中查看網(wǎng)絡(luò)情況。[root@localhost~]#yuminstallbridge-utils[root@localhost~]#brctlshow[root@localhost~]#dockerrun-it--nameb5centos:7/bin/bash[root@0c207cf0b00e/]#yuminstallnet-too

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論