版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本章重點(diǎn)了解容器虛擬化的基本原理。掌握Docker安裝與部署過(guò)程。掌握Docker倉(cāng)庫(kù)搭建過(guò)程。掌握Docker鏡像、Docker容器、Docker網(wǎng)絡(luò)連接的基本原理和具體操作。容器虛擬化概述容器技術(shù)前世今生容器基本原理Docker起源及架構(gòu)01容器虛擬化概述容器虛擬化提供了一種運(yùn)行時(shí)環(huán)境,隔離了上層應(yīng)用與下層操作系統(tǒng)、硬件的關(guān)聯(lián),便于更加高效的構(gòu)建應(yīng)用,也易于管理維護(hù)。在傳統(tǒng)的軟件行業(yè)中,開(kāi)發(fā)人員的主要工作是應(yīng)用程序的編碼、構(gòu)建、測(cè)試和發(fā)布,涉及應(yīng)用程序和運(yùn)行時(shí)平臺(tái)這兩層。而運(yùn)維人員的工作則涉及從硬件、操作系統(tǒng)到運(yùn)行時(shí)平臺(tái)的安裝、配置、運(yùn)行監(jiān)控、升級(jí)和優(yōu)化等工作。在現(xiàn)代計(jì)算機(jī)技術(shù)中,容器技術(shù)就是將應(yīng)用程序打包到每一個(gè)單獨(dú)的容器之中,通過(guò)這個(gè)封裝的過(guò)程,將每個(gè)應(yīng)用程序進(jìn)行隔離,打斷應(yīng)用程序之前的依賴與連接關(guān)系。一個(gè)龐大的服務(wù)系統(tǒng)在容器技術(shù)的支持下,可以由許多不同的應(yīng)用程序所寄居的容器組合而成,這種拆解再組合的過(guò)程,讓?xiě)?yīng)用程序之間的耦合度降到最低。1.容器技術(shù)前世今生最早的容器技術(shù)始于1979年提出的UNIXchroot,它最初是一個(gè)UNIX操作系統(tǒng)的系統(tǒng)調(diào)用,用于將一個(gè)進(jìn)程及其子進(jìn)程的根目錄改變到文件系統(tǒng)中的一個(gè)新位置,讓這些進(jìn)程只能訪問(wèn)這個(gè)新的位置,從而達(dá)到了進(jìn)程隔離的目的。2000年,R&DAssociates公司為FreeBSD引入了一個(gè)類似于chroot的容器技術(shù),名叫Jails。與chroot不同的是,它為文件系統(tǒng)、用戶和網(wǎng)絡(luò)等的隔離增加了進(jìn)程沙盒功能。這是最早期,也是功能最多的容器技術(shù)。2008年,推出了LinuxContainer(簡(jiǎn)稱為L(zhǎng)XC),它是基于Cgroups和Linux命名空間Namespace推出了第一個(gè)最完善的Linux容器。2013年,dotcloud公司推出到現(xiàn)在為止最為流行和使用最廣泛的容器Docker。2.容器基本原理容器本質(zhì)就是宿主機(jī)上的一個(gè)進(jìn)程,它的核心技術(shù)是Namespace和Cgroups。容器技術(shù)通過(guò)Namespace實(shí)現(xiàn)資源隔離,確保一個(gè)容器中運(yùn)行的進(jìn)程只會(huì)感知容器內(nèi)進(jìn)程的變化,不能影響容器外的其他進(jìn)程,同時(shí)也不會(huì)被容器外的其他進(jìn)程所影響。通過(guò)Cgroups實(shí)現(xiàn)資源控制,可以用于進(jìn)行資源的核算和限制。通過(guò)rootfs(RootFileSystem,根文件系統(tǒng),簡(jiǎn)稱為rootfs)實(shí)現(xiàn)文件系統(tǒng)隔離,再加上容器引擎自身的特性來(lái)管理容器的生命周期。2.容器基本原理1.Namespace資源隔離一個(gè)完整的容器需要做到六種基本隔離,也就是Linux內(nèi)核需要提供六種Namespace隔離.Namespace隔離內(nèi)容Mount文件系統(tǒng)Network網(wǎng)絡(luò)資源IPC信號(hào)量、消息隊(duì)列和共享內(nèi)存PID進(jìn)程號(hào)UTS主機(jī)和域名User用戶和用戶組2.容器基本原理1.Namespace資源隔離NamespaceAPI的主要操作主要包括clone()、setns()以及unshare()。1)使用clone()函數(shù)在創(chuàng)建進(jìn)程的同時(shí)創(chuàng)建新的Namespace2)使用setns()加入一個(gè)已經(jīng)存在的Namespace3)使用unshare()在原先進(jìn)程上進(jìn)行Namespace隔離2.容器基本原理2.Cgroups資源隔離Cgroups用來(lái)限制、控制和分離一個(gè)進(jìn)程組群的資源,如CPU、內(nèi)存、I/O等。Cgroups是Linux內(nèi)核提供的一種機(jī)制,這種機(jī)制可以根據(jù)需求把一系列系統(tǒng)任務(wù)及子任務(wù)整合到按資源劃分等級(jí)的不同組內(nèi),從而為系統(tǒng)的資源管理提供一個(gè)統(tǒng)一的框架。Cgroups的主要功能:ResourceLimitation:Cgroups可以對(duì)任務(wù)使用的資源進(jìn)行限制,比如設(shè)置內(nèi)存使用上限以及限制文件系統(tǒng)的緩存等。Prioritization:Cgroups可以通過(guò)分配CPU時(shí)間片個(gè)數(shù)和磁盤(pán)I/O寬帶大小來(lái)控制優(yōu)先級(jí)。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)核版本號(hào)。第二步,查看內(nèi)核版本對(duì)應(yīng)的配置文件(對(duì)應(yīng)的Cgroups的配置值為y,表示已經(jīng)啟用)。第三步,查看Cgroups是否掛載成功(掛載成功,就會(huì)在/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年,幾個(gè)大胡子年輕人在美國(guó)舊金山成立了一家做PaaS平臺(tái)的公司,起名為dotCloud。dotCloud主要是基于PaaS平臺(tái)為開(kāi)發(fā)者或開(kāi)發(fā)商提供相應(yīng)的技術(shù)服務(wù),具體來(lái)說(shuō),是和LXC(Linux容器虛擬技術(shù))有關(guān)的容器技術(shù)。后來(lái),dotCloud公司將自己的容器技術(shù)進(jìn)行了簡(jiǎn)化和標(biāo)準(zhǔn)化,并命名為Docker。2013年3月,dotCloud公司的創(chuàng)始人之一,Docker之父,28歲的SolomonHykes正式?jīng)Q定將Docker項(xiàng)目開(kāi)源。IT工程師發(fā)現(xiàn)了Docker的優(yōu)點(diǎn),然后蜂擁而至,加入Docker開(kāi)源社區(qū)。Docker開(kāi)源后,迅速成為GitHub上最熱門(mén)的項(xiàng)目。開(kāi)源當(dāng)月,Docker0.1版本發(fā)布,此后的每一個(gè)月,Docker都會(huì)發(fā)布一個(gè)版本。到2014年6月9日,Docker1.0版本正式發(fā)布。Docker是基于容器技術(shù)的輕量級(jí)虛擬化解決方案,利用Docker,開(kāi)發(fā)者可以將應(yīng)用及其依賴包打包到一個(gè)容器中,進(jìn)行發(fā)布。3.Docker起源及架構(gòu)Docker并沒(méi)有和虛擬機(jī)一樣利用一個(gè)完全獨(dú)立的GuestOS實(shí)現(xiàn)環(huán)境隔離,它利用的是目前Linux內(nèi)核本身支持的容器方式實(shí)現(xiàn)資源和環(huán)境隔離。虛擬機(jī)技術(shù)和容器技術(shù)對(duì)比3.Docker起源及架構(gòu)與虛擬機(jī)技術(shù)相比較,Docker容器技術(shù)有很多的優(yōu)勢(shì):虛擬機(jī)技術(shù)和容器技術(shù)對(duì)比
虛擬機(jī)技術(shù)容器技術(shù)磁盤(pán)占用情況非常大,甚至上GB很小,甚至幾十KB啟動(dòng)速度很慢,常常需要幾分鐘很快,一般只需幾秒鐘運(yùn)行形態(tài)運(yùn)行在Hypervisor上直接運(yùn)行于宿主機(jī)的內(nèi)核上,不同容器共享同一個(gè)Linux內(nèi)核上并發(fā)性最多幾十個(gè)虛擬機(jī)可以同時(shí)啟動(dòng)成百上千個(gè)容器性能比宿主機(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容器啟動(dòng)的基礎(chǔ)。DockerContainer容器是一個(gè)基于Docker鏡像創(chuàng)建,包含運(yùn)行某一特定程序所需要的OS、軟件、配置文件和數(shù)據(jù),可以一直運(yùn)行的單元。DockerRegistry倉(cāng)庫(kù)主要用來(lái)保存鏡像文件。Docker的基本架構(gòu)3.Docker起源及架構(gòu)要啟動(dòng)一個(gè)新的Docker應(yīng)用A,它的大致工作流程:Docker工作流程Docker安裝與部署Docker安裝鏡像加速02Docker安裝與部署到目前為止,Docker已經(jīng)原生支持幾乎所有的Linux、Windows、MacOS三大平臺(tái)和主流的云平臺(tái)(AmazonEC2,GoogleCloudPlatform,RackspaceCloud和阿里云等)。Docker的安裝指的是DockerEngine的安裝,即Docker中核心的容器處理部分。準(zhǔn)備工作:Docker只能安裝在64位計(jì)算機(jī)上。對(duì)于Linux系統(tǒng),內(nèi)核版本必須大于3.10,如果小于3.10則會(huì)因?yàn)槿鄙貲ocker容器運(yùn)行時(shí)所需要的功能而出錯(cuò)。1.Docker安裝1.將yum包更新到最新。2.安裝所需的軟件包yum-utils、device-mapper-persistent-data和lvm2。3.設(shè)置倉(cāng)庫(kù)(使用阿里云的源地址)。4.安裝最新版本的DockerCE,或轉(zhuǎn)到下一步安裝特定版本。6.啟動(dòng)docker,并設(shè)置為開(kāi)機(jī)啟動(dòng)。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ù)器在國(guó)外,有時(shí)在國(guó)內(nèi)無(wú)法正常拉取鏡像。為了解決這個(gè)問(wèn)題,可以為Docker設(shè)置國(guó)內(nèi)的鏡像加速器。國(guó)內(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ī)的鏡像,是一個(gè)只讀的Docker容器模板。它是采用聯(lián)合掛載技術(shù)實(shí)現(xiàn)的一個(gè)層疊式的文件系統(tǒng)。鏡像中含有啟動(dòng)Docker容器所需的文件系統(tǒng)結(jié)構(gòu)和內(nèi)容,是容器構(gòu)建的基石。registry主要用來(lái)保存Docker鏡像,包括鏡像層次結(jié)構(gòu)和關(guān)于鏡像的元數(shù)據(jù)。repository是具有某個(gè)功能的Docker鏡像的所有迭代版本構(gòu)成的鏡像組。manifest(描述文件)主要存在于registry中作為Docker鏡像的元數(shù)據(jù)文件,在pull、push、save和load過(guò)程中作為鏡像結(jié)構(gòu)和基礎(chǔ)信息的描述文件。image用來(lái)存儲(chǔ)一組鏡像相關(guān)的元數(shù)據(jù)信息。layer是一個(gè)Docker用來(lái)管理鏡像層的中間概念,鏡像是鏡像層組成的,而單個(gè)鏡像層可以被多個(gè)鏡像共享。1.Docker鏡像基礎(chǔ)registry是repository的集合repository是image的集合image是由多個(gè)layer組成的一個(gè)layer也可以被多個(gè)鏡像所共享Docker鏡像關(guān)鍵概念關(guān)系圖1.Docker鏡像基礎(chǔ)Docker鏡像的主要特點(diǎn):分層:采用分層方式構(gòu)建,每一個(gè)鏡像都由一系列的鏡像層組成。寫(xiě)時(shí)復(fù)制:采用寫(xiě)時(shí)復(fù)制策略,多個(gè)容器間共享鏡像,所有鏡像層都以只讀方式掛載到一個(gè)掛載點(diǎn),上面附加一個(gè)可讀寫(xiě)層。當(dāng)需要修改鏡像的文件時(shí),只對(duì)最上方的讀寫(xiě)層進(jìn)行改動(dòng),不覆蓋下層已有文件系統(tǒng)的內(nèi)容。聯(lián)合掛載:聯(lián)合掛載可以在一個(gè)掛載點(diǎn)同時(shí)掛載多個(gè)文件系統(tǒng),將掛載點(diǎn)的原目錄與被掛載內(nèi)容進(jìn)行整合,最終可見(jiàn)的文件系統(tǒng)將會(huì)包含整合之后的各層文件和目錄。1.Docker鏡像基礎(chǔ)假設(shè)某一個(gè)鏡像一共有兩層,第一層有三個(gè)文件夾,第二層有兩個(gè)文件夾,使用聯(lián)合掛載技術(shù)疊加后,從內(nèi)核角度能夠顯式區(qū)分開(kāi)兩個(gè)層次,但是從用戶的角度來(lái)看,只可以看到五個(gè)文件夾,感覺(jué)不到分層的存在。從用戶的角度查看分層文件系統(tǒng)2.構(gòu)建鏡像鏡像的構(gòu)建是Docker工作流程的第一步,有了鏡像才能運(yùn)行容器。構(gòu)建一個(gè)Docker鏡像的常見(jiàn)方法有兩種,一種是通過(guò)命令“dockercommit”構(gòu)建鏡像,一種是通過(guò)Dockerfile文件構(gòu)建鏡像。2.構(gòu)建鏡像1.使用dockercommit命令構(gòu)建鏡像舉例說(shuō)明:通過(guò)鏡像centos:7啟動(dòng)一個(gè)容器,在容器中新建一個(gè)1.txt文件,內(nèi)容為“Thisisatest”,用dockercommit命令提交新容器為鏡像。1)下載鏡像centos:7,并利用鏡像來(lái)啟動(dòng)一個(gè)交互式容器commit_test。2)在容器中新建一個(gè)1.txt文件,內(nèi)容為“Thisisatest”,然后退出容器。[root@localhost~]#dockerpullcentos:7[root@5f29ebd5c1ac/]#echo"Thisisatest">1.txt[root@5f29ebd5c1ac/]#exit2.構(gòu)建鏡像1.使用dockercommit命令構(gòu)建鏡像舉例說(shuō)明:通過(guò)鏡像centos:7啟動(dòng)一個(gè)容器,在容器中新建一個(gè)1.txt文件,內(nèi)容為“Thisisatest”,用dockercommit命令提交新容器為鏡像。3)把容器commit_test提交為鏡像commit_image1,設(shè)置鏡像作者為catherine,提交修改的內(nèi)容1.txt。4)使用剛創(chuàng)建的鏡像commit_image1啟動(dòng)一個(gè)新容器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.通過(guò)Dockerfile文件構(gòu)建鏡像舉例說(shuō)明:通過(guò)鏡像centos:7啟動(dòng)一個(gè)容器,在容器中新建一個(gè)2.txt文件,內(nèi)容為“Thisisatest2”,用Dockerfile文件提交新容器為鏡像。1)新建并編寫(xiě)Dockerfile文件。2)使用剛編寫(xiě)的Dockerfile文件,使用dockerbuild命令構(gòu)建鏡像commit_image2。3)使用剛創(chuàng)建的鏡像commit_image2啟動(dòng)一個(gè)新容器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í)際過(guò)程中,經(jīng)常需要查看鏡像相關(guān)信息??梢允褂胐ockerimages命令查看鏡像名稱、標(biāo)簽、ID號(hào)、創(chuàng)建時(shí)間和大小等簡(jiǎn)單信息。列出包含中間層的所有鏡像。列出鏡像名為ubuntu的鏡像id。用dockerinspect查看鏡像hello-world詳細(xì)信息。查看hello-world鏡像的創(chuàng)建時(shí)間。[root@localhost~]#dockerimages–a[root@localhost~]#dockerimages-qubuntu[root@localhost~]#dockerinspecthello-world[root@localhost~]#dockerinspect-f'鏡像創(chuàng)建時(shí)間是:{{.Created}}'hello-world4.分發(fā)鏡像Docker技術(shù)的目的就是為了在不同機(jī)器上創(chuàng)建無(wú)差別的應(yīng)用環(huán)境,使一個(gè)機(jī)器上的容器遷移到另一臺(tái)機(jī)器上更加容易。可以采用容器遷移命令來(lái)實(shí)現(xiàn),也可以采用鏡像分發(fā)的方式來(lái)實(shí)現(xiàn)。能夠進(jìn)行鏡像分發(fā)的命令有很多,包括dockerpull和dockerpush,dockersave和dockerload。dockerpull和dockerpush通過(guò)線上DockerHub的方式遷移。dockersave和dockerload通過(guò)線下包分發(fā)的方式進(jìn)行遷移。4.分發(fā)鏡像1.dockerpull命令Docker提供了非常方便的拉取指令,通過(guò)dockerpull命令可以拉取各個(gè)鏡像倉(cāng)庫(kù)的鏡像。從官方倉(cāng)庫(kù)DockerHub中拉取鏡像ubuntu:16.04。如果想從本地私有鏡像倉(cāng)庫(kù)中拉取鏡像ubuntu:16.04,可以指定倉(cāng)庫(kù)地址和端口號(hào)。[root@localhost~]#dockerpullubuntu:16.04[root@localhost~]#dockerpulllocalhost:5000ubuntu:16.044.分發(fā)鏡像2.dockerpush命令當(dāng)用戶制作了鏡像后,希望將其上傳到倉(cāng)庫(kù)中,此時(shí)可以通過(guò)dockerpush命令完成該操作。DockerHub是Docker官方默認(rèn)倉(cāng)庫(kù),如果讀者想要把鏡像發(fā)布到官方默認(rèn)倉(cāng)庫(kù),在使用push命令之前,需要先在DockerHub鏡像倉(cāng)庫(kù)中注冊(cè)賬戶并登錄。將鏡像commit_image1發(fā)布到DockerHub上:1)在終端使用dockerlogin命令登錄DockerHub倉(cāng)庫(kù)。2)在推送鏡像之前需要先給鏡像打上標(biāo)簽為147258369abc/commit_image1。3)使用dockerpush命令將鏡像推送到鏡像倉(cāng)庫(kù)中。[root@localhost~]#dockerlogin[centos@localhost~]$dockertagcommit_image1147258369abc/commit_image1[root@localhost~]#dockerpush147258369abc/commit_image14.分發(fā)鏡像3.dockersave命令若要將某一個(gè)鏡像文件保存在本地文件系統(tǒng)時(shí),可以使用dockersave命令。將鏡像centos:7保存為centos7.tar文檔。使用“>”符號(hào)導(dǎo)出鏡像。[root@localhost~]#dockersave-ocentos7.tarcentos:7[root@localhost~]#llcentos7.tar[root@localhost~]#dockersavecentos:7>centos7.tar4.分發(fā)鏡像4.dockerload命令使用dockerload命令可以加載導(dǎo)出的鏡像包到本地倉(cāng)庫(kù)中。將使用dockersave命令生成的centos7.tar文檔導(dǎo)入到本地倉(cāng)庫(kù)中。1)查看本地鏡像倉(cāng)庫(kù),確認(rèn)沒(méi)有centos:7鏡像。2)使用dockerload命令將tar包導(dǎo)入到本地鏡像倉(cāng)庫(kù)。3)再次查看本地鏡像倉(cāng)庫(kù),確認(rèn)centos:7鏡像包被導(dǎo)入成功。也可以使用“<”符號(hào)導(dǎo)入鏡像。[root@localhost~]#dockerimages[root@localhost~]#dockerload-icentos7.tar[root@localhost~]#dockerimages[root@localhost~]#dockerload<centos7.tar5.搜索鏡像常見(jiàn)的鏡像搜索方式有兩種,第一種是通過(guò)dockersearch命令行方式搜索,第二種是直接在DockerHub官方網(wǎng)站上直接搜索。從DockerHub查找所有鏡像名包含centos,并且收藏?cái)?shù)大于20的鏡像。在DockerHub網(wǎng)站上直接搜索centos。[root@localhost~]#dockersearch-fstars=20centos6.鏡像其他操作刪除鏡像一般使用命令dockerrmi刪除鏡像文件ubuntu:14.04。刪除一個(gè)正在被使用的鏡像文件ubuntu:16.04。dockerhistory可以用來(lái)查看指定鏡像的創(chuàng)建歷史。查看鏡像文件centos:7的歷史。[root@localhost~]#dockerhistorycentos:7[root@localhost~]#dockerrmiubuntu:14.04[root@localhost~]#dockerrmi-fubuntu:16.04Docker倉(cāng)庫(kù)Docker倉(cāng)庫(kù)簡(jiǎn)介Registry私有倉(cāng)庫(kù)的搭建與使用041.Docker倉(cāng)庫(kù)簡(jiǎn)介Docker倉(cāng)庫(kù)是用來(lái)保存鏡像的位置,Docker提供一個(gè)注冊(cè)服務(wù)器Registry來(lái)保存多個(gè)倉(cāng)庫(kù)Repository。Docker倉(cāng)庫(kù)可以很方便的進(jìn)行鏡像的存儲(chǔ)、分發(fā)和更新等管理操作。一般來(lái)說(shuō),倉(cāng)庫(kù)有以下幾種:DockerHub:當(dāng)前最大的Docker鏡像倉(cāng)庫(kù),也是官方鏡像倉(cāng)庫(kù)。內(nèi)部私有鏡像倉(cāng)庫(kù):用戶在內(nèi)部創(chuàng)建的私有倉(cāng)庫(kù)。在本地局域網(wǎng)搭建,類似公共倉(cāng)庫(kù)。第三方鏡像倉(cāng)庫(kù):第三方公司設(shè)置的鏡像倉(cāng)庫(kù)。1.Docker倉(cāng)庫(kù)簡(jiǎn)介在DockerHub官方鏡像倉(cāng)庫(kù)中注冊(cè)賬號(hào),并使用。DockerHub的注冊(cè)界面填寫(xiě)DockerID,Email,Password等信息,并點(diǎn)擊SignUp。1.Docker倉(cāng)庫(kù)簡(jiǎn)介在DockerHub官方鏡像倉(cāng)庫(kù)中注冊(cè)賬號(hào),并使用。登錄成功后,即可進(jìn)入DockerHub官網(wǎng)的個(gè)人頁(yè)面。在創(chuàng)建Repository時(shí),設(shè)置名為ubuntu。之后就可以把ubuntu相關(guān)的鏡像推送到此處。2.Registry私有倉(cāng)庫(kù)的搭建和使用在實(shí)際應(yīng)用中,除了使用DockerHub可以共享鏡像倉(cāng)庫(kù),還可以自己搭建私有的鏡像倉(cāng)庫(kù)。在企業(yè)中,為了避免商業(yè)項(xiàng)目被暴露,一般選擇部署自己的私有鏡像倉(cāng)庫(kù)。以下以兩個(gè)節(jié)點(diǎn)為例給出部署私有鏡像倉(cāng)庫(kù)的步驟:環(huán)境:準(zhǔn)備兩臺(tái)安裝好Docker的服務(wù)器。服務(wù)器端機(jī)器:Docker私有倉(cāng)庫(kù)服務(wù)器,運(yùn)行Registry容器;客戶端機(jī)器:已經(jīng)安裝Docker的普通服務(wù)器,在這臺(tái)服務(wù)器上下載一個(gè)測(cè)試鏡像,然后上傳到Registry服務(wù)器進(jìn)行測(cè)試。2.Registry私有倉(cāng)庫(kù)的搭建和使用服務(wù)器端操作:1)在私有倉(cāng)庫(kù)服務(wù)器上快速創(chuàng)建鏡像倉(cāng)庫(kù)。2)使用dockerps-l命令查看容器情況。3)查看剛剛創(chuàng)建的鏡像倉(cāng)庫(kù)中是否有鏡像文件。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私有倉(cāng)庫(kù)的搭建和使用客戶端操作:1)在客戶端機(jī)器上下載一個(gè)nginx:latest鏡像,并標(biāo)記為私有倉(cāng)庫(kù)的版本。2)在客戶端配置私有倉(cāng)庫(kù)的可信任設(shè)置,以便可以通過(guò)HTTP直接訪問(wèn)。3)將剛剛標(biāo)記的鏡像推送到私有倉(cāng)庫(kù)中。4)在服務(wù)器端查看倉(cāng)庫(kù)中的鏡像列表。[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)建與啟動(dòng)容器查看容器分發(fā)容器進(jìn)入容器內(nèi)部容器其他操作051.Docker容器基礎(chǔ)Docker容器是基于鏡像運(yùn)行的一個(gè)輕量級(jí)的環(huán)境。可以把Docker容器簡(jiǎn)單理解為在沙盒中運(yùn)行的進(jìn)程。這個(gè)沙盒包含了該進(jìn)程運(yùn)行所必須的資源,包括文件系統(tǒng)、系統(tǒng)類庫(kù)和SHELL環(huán)境等,但這個(gè)沙盒默認(rèn)不會(huì)運(yùn)行任何程序。用戶需要在沙盒中運(yùn)行一個(gè)進(jìn)程來(lái)啟動(dòng)某一個(gè)容器,這個(gè)進(jìn)程是該容器的唯一進(jìn)程。Docker容器有以下兩種運(yùn)行態(tài):前臺(tái)交互式:容器運(yùn)行在前臺(tái)。后臺(tái)守護(hù)式:容器運(yùn)行在后臺(tái)。2.創(chuàng)建與啟動(dòng)容器使用dockercreate命令可以新建一個(gè)容器,但容器并未啟動(dòng)。使用centos:7鏡像創(chuàng)建一個(gè)容器。啟動(dòng)將剛剛創(chuàng)建的容器create1。[root@localhost~]#dockercreate--namecreate1-itcentos:7[root@localhost~]#dockerstartcreate12.創(chuàng)建與啟動(dòng)容器原來(lái)沒(méi)有這個(gè)容器,需要基于一個(gè)鏡像啟動(dòng)新的容器,此時(shí)使用dockerrun命令。使用鏡像文件centos:7創(chuàng)建一個(gè)交互式容器,并查看容器當(dāng)前目錄。使用鏡像文件ubuntu:16.04啟動(dòng)一個(gè)后臺(tái)守護(hù)式容器,讓其在后臺(tái)一直輸出hellodocker。1.啟動(dòng)后臺(tái)守護(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)建的一個(gè)容器。列出最近創(chuàng)建的5個(gè)容器信息。[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)出一個(gè)已經(jīng)創(chuàng)建的容器到一個(gè)文件,不管此時(shí)這個(gè)容器是否處于運(yùn)行狀態(tài),可以使用dockerexport命令。將容器exec1導(dǎo)出為一個(gè)文件1.tar。容器導(dǎo)入命令容器導(dǎo)入是指使用dockerimport命令將文件導(dǎo)入到本地倉(cāng)庫(kù)成為鏡像,啟動(dòng)鏡像就可以恢復(fù)容器。將剛剛創(chuàng)建的文件1.tar導(dǎo)入到本地鏡像倉(cāng)庫(kù),名為import1。[root@localhost~]#dockerimport1.tarimport1[root@localhost~]#dockerexportexec1-o1.tar5.進(jìn)入容器內(nèi)部1.dockerattach命令dockerattach可以attach到一個(gè)已經(jīng)運(yùn)行的容器的stdin,然后進(jìn)行命令執(zhí)行的動(dòng)作。1)以交互方式運(yùn)行一個(gè)容器attach1,使用ls命令查看容器當(dāng)前目錄下的內(nèi)容,然后用ctrl+P+Q來(lái)退出但是不結(jié)束交互式容器。2)使用ps命令查看容器的狀態(tài)是否是正在運(yùn)行。3)使用dockerattach加上容器的id號(hào)或名字,再次進(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)入一個(gè)已經(jīng)運(yùn)行的容器,然后進(jìn)行命令執(zhí)行的動(dòng)作。1)以守護(hù)式方式運(yùn)行一個(gè)容器exec1。2)使用ps命令查看容器的狀態(tài),使用logs命令查看容器的日志。3)使用dockerexec加上容器的ID號(hào)或名字,以交互方式進(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.容器其他操作容器停止:指停止一個(gè)正在運(yùn)行的容器。停止一個(gè)正在運(yùn)行的容器exec1。[root@localhost~]#dockerkillexec1[root@localhost~]#dockerstopexec1容器殺死:是指快速停止一個(gè)容器,類似于強(qiáng)制結(jié)束。殺死一個(gè)正在運(yùn)行的容器exec1。容器刪除:容器的刪除是指刪除一個(gè)或多個(gè)容器。用-f選項(xiàng)來(lái)強(qiáng)制刪除一個(gè)正在運(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ù)等來(lái)實(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)程通過(guò)docker0為容器提供網(wǎng)絡(luò)服務(wù)。docker0是Linux的虛擬網(wǎng)橋,是數(shù)據(jù)鏈路層的設(shè)備。默認(rèn)情況下容器是無(wú)法與外部通信互聯(lián)的,需要在創(chuàng)建容器時(shí)加上相應(yīng)的參數(shù)實(shí)現(xiàn)端口映射,這就是dockerrun的-p參數(shù)。1.Docker網(wǎng)絡(luò)基礎(chǔ)啟動(dòng)一個(gè)nginx服務(wù),將宿主機(jī)的端口8000映射到容器內(nèi)部80端口。可以在宿主機(jī)瀏覽器上訪問(wèn):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:處于這個(gè)模式下的Docker容器會(huì)共享其它容器的網(wǎng)絡(luò)環(huán)境,因此,至少這兩個(gè)容器之間不存在網(wǎng)絡(luò)隔離,而這兩個(gè)容器又與宿主機(jī)以及除此之外其他的容器存在網(wǎng)絡(luò)隔離。4.Bridge:默認(rèn)網(wǎng)絡(luò)驅(qū)動(dòng)程序。當(dāng)你的應(yīng)用程序在需要通信的容器中運(yùn)行時(shí),通常會(huì)使用橋接網(wǎng)絡(luò)。Docker內(nèi)置bridge、host和none三個(gè)網(wǎng)絡(luò)。2.Docker網(wǎng)絡(luò)模式1.Host模式Host模式?jīng)]有為容器創(chuàng)建一個(gè)隔離的網(wǎng)絡(luò)環(huán)境,該模式下的Docker容器會(huì)和宿主機(jī)共享同一個(gè)網(wǎng)絡(luò)Namespace。創(chuàng)建一個(gè)網(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)建一個(gè)網(wǎng)絡(luò)模式為host的容器。3)在容器內(nèi)部,在/tmp目錄下新建文件index.html,并寫(xiě)入數(shù)據(jù)。啟動(dòng)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模式時(shí),表示Docker容器擁有自己的NetworkNamespace,但并未對(duì)Docker容器進(jìn)行任何網(wǎng)絡(luò)配置。創(chuàng)建一個(gè)網(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)存在的一個(gè)容器共享一個(gè)NetworkNamespace。創(chuàng)建一個(gè)網(wǎng)絡(luò)模式為Joined的容器,并查看網(wǎng)絡(luò)狀況。1)創(chuàng)建一個(gè)容器b3,用hostname查看主機(jī)名,ip命令查看網(wǎng)絡(luò)情況。2)創(chuàng)建一個(gè)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)建一個(gè)網(wǎng)絡(luò)模式為Joined的容器,并查看網(wǎng)絡(luò)狀況。3)在容器b3內(nèi)部,在/tmp目錄下新建文件index.html,并寫(xiě)入數(shù)據(jù),啟動(dòng)httpd。4)在容器b4上訪問(wèn)本地接口lo,可以正常訪問(wèn)。5)在容器b3上新建一個(gè)目錄。6)在容器b4上訪問(wèn)目錄,不成功。/#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ò)模式,不寫(xiě)--net參數(shù),就是Bridge模式。容器創(chuàng)建時(shí),在主機(jī)上創(chuàng)建一對(duì)虛擬網(wǎng)卡vethpair設(shè)備,Docker將vethpair設(shè)備的一端放在新創(chuàng)建的容器中,命名為eth0(容器的網(wǎng)卡),另一端放在宿主機(jī)中,命名為veth***,并將這個(gè)網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中。2.Docker網(wǎng)絡(luò)模式4.Bridge模式創(chuàng)建一個(gè)Bridge模式容器,在宿主機(jī)上和容器內(nèi)部查看網(wǎng)絡(luò)接口情況。1)安裝網(wǎng)橋管理工具。2)查看網(wǎng)橋設(shè)備docker0,此時(shí)沒(méi)有相應(yīng)的網(wǎng)絡(luò)接口。3)開(kāi)啟一個(gè)交互式容器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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《chap會(huì)計(jì)憑證》課件
- 《服裝行業(yè)櫥窗展示》課件
- 《建設(shè)項(xiàng)目質(zhì)量管理》課件
- 2024-2025學(xué)年天津市第三中學(xué)高三上學(xué)期10月月考?xì)v史試題(解析版)
- 單位管理制度集合大全【員工管理】十篇
- 單位管理制度集粹選集【人員管理】十篇
- 《中國(guó)心力衰竭診斷和治療指南(2024)》解讀完整版
- 單位管理制度匯編大全【職工管理】
- 單位管理制度合并選集職員管理
- 《電阻的串聯(lián)和并聯(lián)》課件
- 羽毛球歷史-探究羽毛球的歷史和文化
- 2024年單位內(nèi)部治安保衛(wèi)制度范本(四篇)
- 手衛(wèi)生知識(shí)答題及答案
- GB/T 11017.1-2024額定電壓66 kV(Um=72.5 kV)和110 kV(Um=126 kV)交聯(lián)聚乙烯絕緣電力電纜及其附件第1部分:試驗(yàn)方法和要求
- 華為任職資格體系介紹
- 專題06手拉手模型(原卷版+解析)
- 《珍愛(ài)生命拒絕毒品》主題班會(huì)課件
- 儲(chǔ)能鋰離子電池 液冷熱管理系統(tǒng)運(yùn)行和維護(hù)規(guī)范
- GB/T 32399-2024信息技術(shù)云計(jì)算參考架構(gòu)
- 2024AI Agent行業(yè)研究報(bào)告
- 宮腔鏡手術(shù)并發(fā)癥及處理
評(píng)論
0/150
提交評(píng)論