版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本章重點了解容器虛擬化的基本原理。掌握Docker安裝與部署過程。掌握Docker倉庫搭建過程。掌握Docker鏡像、Docker容器、Docker網絡連接的基本原理和具體操作。容器虛擬化概述容器技術前世今生容器基本原理Docker起源及架構01容器虛擬化概述容器虛擬化提供了一種運行時環(huán)境,隔離了上層應用與下層操作系統(tǒng)、硬件的關聯,便于更加高效的構建應用,也易于管理維護。在傳統(tǒng)的軟件行業(yè)中,開發(fā)人員的主要工作是應用程序的編碼、構建、測試和發(fā)布,涉及應用程序和運行時平臺這兩層。而運維人員的工作則涉及從硬件、操作系統(tǒng)到運行時平臺的安裝、配置、運行監(jiān)控、升級和優(yōu)化等工作。在現代計算機技術中,容器技術就是將應用程序打包到每一個單獨的容器之中,通過這個封裝的過程,將每個應用程序進行隔離,打斷應用程序之前的依賴與連接關系。一個龐大的服務系統(tǒng)在容器技術的支持下,可以由許多不同的應用程序所寄居的容器組合而成,這種拆解再組合的過程,讓應用程序之間的耦合度降到最低。1.容器技術前世今生最早的容器技術始于1979年提出的UNIXchroot,它最初是一個UNIX操作系統(tǒng)的系統(tǒng)調用,用于將一個進程及其子進程的根目錄改變到文件系統(tǒng)中的一個新位置,讓這些進程只能訪問這個新的位置,從而達到了進程隔離的目的。2000年,R&DAssociates公司為FreeBSD引入了一個類似于chroot的容器技術,名叫Jails。與chroot不同的是,它為文件系統(tǒng)、用戶和網絡等的隔離增加了進程沙盒功能。這是最早期,也是功能最多的容器技術。2008年,推出了LinuxContainer(簡稱為LXC),它是基于Cgroups和Linux命名空間Namespace推出了第一個最完善的Linux容器。2013年,dotcloud公司推出到現在為止最為流行和使用最廣泛的容器Docker。2.容器基本原理容器本質就是宿主機上的一個進程,它的核心技術是Namespace和Cgroups。容器技術通過Namespace實現資源隔離,確保一個容器中運行的進程只會感知容器內進程的變化,不能影響容器外的其他進程,同時也不會被容器外的其他進程所影響。通過Cgroups實現資源控制,可以用于進行資源的核算和限制。通過rootfs(RootFileSystem,根文件系統(tǒng),簡稱為rootfs)實現文件系統(tǒng)隔離,再加上容器引擎自身的特性來管理容器的生命周期。2.容器基本原理1.Namespace資源隔離一個完整的容器需要做到六種基本隔離,也就是Linux內核需要提供六種Namespace隔離.Namespace隔離內容Mount文件系統(tǒng)Network網絡資源IPC信號量、消息隊列和共享內存PID進程號UTS主機和域名User用戶和用戶組2.容器基本原理1.Namespace資源隔離NamespaceAPI的主要操作主要包括clone()、setns()以及unshare()。1)使用clone()函數在創(chuàng)建進程的同時創(chuàng)建新的Namespace2)使用setns()加入一個已經存在的Namespace3)使用unshare()在原先進程上進行Namespace隔離2.容器基本原理2.Cgroups資源隔離Cgroups用來限制、控制和分離一個進程組群的資源,如CPU、內存、I/O等。Cgroups是Linux內核提供的一種機制,這種機制可以根據需求把一系列系統(tǒng)任務及子任務整合到按資源劃分等級的不同組內,從而為系統(tǒng)的資源管理提供一個統(tǒng)一的框架。Cgroups的主要功能:ResourceLimitation:Cgroups可以對任務使用的資源進行限制,比如設置內存使用上限以及限制文件系統(tǒng)的緩存等。Prioritization:Cgroups可以通過分配CPU時間片個數和磁盤I/O寬帶大小來控制優(yōu)先級。Accounting:Cgroups可以統(tǒng)計系統(tǒng)的資源使用量,主要目的是為了計費。Control:Cgroups可以進行掛起進程或恢復進程等操作。2.容器基本原理2.Cgroups資源隔離查看Linux內核中是否啟用了Cgroups第一步,查看linux的內核版本號。第二步,查看內核版本對應的配置文件(對應的Cgroups的配置值為y,表示已經啟用)。第三步,查看Cgroups是否掛載成功(掛載成功,就會在/sys/fs/cgroup目錄下看到相應文件)。[root@localhost~]#uname–r[root@localhost~]#cat/boot/config-3.10.0-1160.15.2.el7.x86_64|grepCGROUP[root@localhost~]#mount-tcgroup3.Docker起源及架構2010年,幾個大胡子年輕人在美國舊金山成立了一家做PaaS平臺的公司,起名為dotCloud。dotCloud主要是基于PaaS平臺為開發(fā)者或開發(fā)商提供相應的技術服務,具體來說,是和LXC(Linux容器虛擬技術)有關的容器技術。后來,dotCloud公司將自己的容器技術進行了簡化和標準化,并命名為Docker。2013年3月,dotCloud公司的創(chuàng)始人之一,Docker之父,28歲的SolomonHykes正式決定將Docker項目開源。IT工程師發(fā)現了Docker的優(yōu)點,然后蜂擁而至,加入Docker開源社區(qū)。Docker開源后,迅速成為GitHub上最熱門的項目。開源當月,Docker0.1版本發(fā)布,此后的每一個月,Docker都會發(fā)布一個版本。到2014年6月9日,Docker1.0版本正式發(fā)布。Docker是基于容器技術的輕量級虛擬化解決方案,利用Docker,開發(fā)者可以將應用及其依賴包打包到一個容器中,進行發(fā)布。3.Docker起源及架構Docker并沒有和虛擬機一樣利用一個完全獨立的GuestOS實現環(huán)境隔離,它利用的是目前Linux內核本身支持的容器方式實現資源和環(huán)境隔離。虛擬機技術和容器技術對比3.Docker起源及架構與虛擬機技術相比較,Docker容器技術有很多的優(yōu)勢:虛擬機技術和容器技術對比
虛擬機技術容器技術磁盤占用情況非常大,甚至上GB很小,甚至幾十KB啟動速度很慢,常常需要幾分鐘很快,一般只需幾秒鐘運行形態(tài)運行在Hypervisor上直接運行于宿主機的內核上,不同容器共享同一個Linux內核上并發(fā)性最多幾十個虛擬機可以同時啟動成百上千個容器性能比宿主機差接近于宿主機本地進程資源利用率低高3.Docker起源及架構Docker是C/S(客戶端Client-服務器Server)架構模式。DockerClient客戶端和daemon守護進程。Docker鏡像是用于創(chuàng)建Docker容器的模板,是Docker容器啟動的基礎。DockerContainer容器是一個基于Docker鏡像創(chuàng)建,包含運行某一特定程序所需要的OS、軟件、配置文件和數據,可以一直運行的單元。DockerRegistry倉庫主要用來保存鏡像文件。Docker的基本架構3.Docker起源及架構要啟動一個新的Docker應用A,它的大致工作流程:Docker工作流程Docker安裝與部署Docker安裝鏡像加速02Docker安裝與部署到目前為止,Docker已經原生支持幾乎所有的Linux、Windows、MacOS三大平臺和主流的云平臺(AmazonEC2,GoogleCloudPlatform,RackspaceCloud和阿里云等)。Docker的安裝指的是DockerEngine的安裝,即Docker中核心的容器處理部分。準備工作:Docker只能安裝在64位計算機上。對于Linux系統(tǒng),內核版本必須大于3.10,如果小于3.10則會因為缺少Docker容器運行時所需要的功能而出錯。1.Docker安裝1.將yum包更新到最新。2.安裝所需的軟件包yum-utils、device-mapper-persistent-data和lvm2。3.設置倉庫(使用阿里云的源地址)。4.安裝最新版本的DockerCE,或轉到下一步安裝特定版本。6.啟動docker,并設置為開機啟動。7.運行“dockerrunhello-world”命令,驗證是否正確安裝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服務器在國外,有時在國內無法正常拉取鏡像。為了解決這個問題,可以為Docker設置國內的鏡像加速器。國內Docker鏡像加速的組織有很多,在本節(jié)以阿里云為例,參考阿里云的官方操作文檔進行設置。[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鏡像基礎構建鏡像查看鏡像分發(fā)鏡像搜索鏡像鏡像其他操作031.Docker鏡像基礎Docker鏡像類似于虛擬機的鏡像,是一個只讀的Docker容器模板。它是采用聯合掛載技術實現的一個層疊式的文件系統(tǒng)。鏡像中含有啟動Docker容器所需的文件系統(tǒng)結構和內容,是容器構建的基石。registry主要用來保存Docker鏡像,包括鏡像層次結構和關于鏡像的元數據。repository是具有某個功能的Docker鏡像的所有迭代版本構成的鏡像組。manifest(描述文件)主要存在于registry中作為Docker鏡像的元數據文件,在pull、push、save和load過程中作為鏡像結構和基礎信息的描述文件。image用來存儲一組鏡像相關的元數據信息。layer是一個Docker用來管理鏡像層的中間概念,鏡像是鏡像層組成的,而單個鏡像層可以被多個鏡像共享。1.Docker鏡像基礎registry是repository的集合repository是image的集合image是由多個layer組成的一個layer也可以被多個鏡像所共享Docker鏡像關鍵概念關系圖1.Docker鏡像基礎Docker鏡像的主要特點:分層:采用分層方式構建,每一個鏡像都由一系列的鏡像層組成。寫時復制:采用寫時復制策略,多個容器間共享鏡像,所有鏡像層都以只讀方式掛載到一個掛載點,上面附加一個可讀寫層。當需要修改鏡像的文件時,只對最上方的讀寫層進行改動,不覆蓋下層已有文件系統(tǒng)的內容。聯合掛載:聯合掛載可以在一個掛載點同時掛載多個文件系統(tǒng),將掛載點的原目錄與被掛載內容進行整合,最終可見的文件系統(tǒng)將會包含整合之后的各層文件和目錄。1.Docker鏡像基礎假設某一個鏡像一共有兩層,第一層有三個文件夾,第二層有兩個文件夾,使用聯合掛載技術疊加后,從內核角度能夠顯式區(qū)分開兩個層次,但是從用戶的角度來看,只可以看到五個文件夾,感覺不到分層的存在。從用戶的角度查看分層文件系統(tǒng)2.構建鏡像鏡像的構建是Docker工作流程的第一步,有了鏡像才能運行容器。構建一個Docker鏡像的常見方法有兩種,一種是通過命令“dockercommit”構建鏡像,一種是通過Dockerfile文件構建鏡像。2.構建鏡像1.使用dockercommit命令構建鏡像舉例說明:通過鏡像centos:7啟動一個容器,在容器中新建一個1.txt文件,內容為“Thisisatest”,用dockercommit命令提交新容器為鏡像。1)下載鏡像centos:7,并利用鏡像來啟動一個交互式容器commit_test。2)在容器中新建一個1.txt文件,內容為“Thisisatest”,然后退出容器。[root@localhost~]#dockerpullcentos:7[root@5f29ebd5c1ac/]#echo"Thisisatest">1.txt[root@5f29ebd5c1ac/]#exit2.構建鏡像1.使用dockercommit命令構建鏡像舉例說明:通過鏡像centos:7啟動一個容器,在容器中新建一個1.txt文件,內容為“Thisisatest”,用dockercommit命令提交新容器為鏡像。3)把容器commit_test提交為鏡像commit_image1,設置鏡像作者為catherine,提交修改的內容1.txt。4)使用剛創(chuàng)建的鏡像commit_image1啟動一個新容器commit_test1,并查看容器內部是否有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.構建鏡像2.通過Dockerfile文件構建鏡像舉例說明:通過鏡像centos:7啟動一個容器,在容器中新建一個2.txt文件,內容為“Thisisatest2”,用Dockerfile文件提交新容器為鏡像。1)新建并編寫Dockerfile文件。2)使用剛編寫的Dockerfile文件,使用dockerbuild命令構建鏡像commit_image2。3)使用剛創(chuàng)建的鏡像commit_image2啟動一個新容器commit_test2,并查看容器內的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.查看鏡像在實際過程中,經常需要查看鏡像相關信息??梢允褂胐ockerimages命令查看鏡像名稱、標簽、ID號、創(chuàng)建時間和大小等簡單信息。列出包含中間層的所有鏡像。列出鏡像名為ubuntu的鏡像id。用dockerinspect查看鏡像hello-world詳細信息。查看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技術的目的就是為了在不同機器上創(chuàng)建無差別的應用環(huán)境,使一個機器上的容器遷移到另一臺機器上更加容易??梢圆捎萌萜鬟w移命令來實現,也可以采用鏡像分發(fā)的方式來實現。能夠進行鏡像分發(fā)的命令有很多,包括dockerpull和dockerpush,dockersave和dockerload。dockerpull和dockerpush通過線上DockerHub的方式遷移。dockersave和dockerload通過線下包分發(fā)的方式進行遷移。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命令當用戶制作了鏡像后,希望將其上傳到倉庫中,此時可以通過dockerpush命令完成該操作。DockerHub是Docker官方默認倉庫,如果讀者想要把鏡像發(fā)布到官方默認倉庫,在使用push命令之前,需要先在DockerHub鏡像倉庫中注冊賬戶并登錄。將鏡像commit_image1發(fā)布到DockerHub上:1)在終端使用dockerlogin命令登錄DockerHub倉庫。2)在推送鏡像之前需要先給鏡像打上標簽為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文檔。使用“>”符號導出鏡像。[root@localhost~]#dockersave-ocentos7.tarcentos:7[root@localhost~]#llcentos7.tar[root@localhost~]#dockersavecentos:7>centos7.tar4.分發(fā)鏡像4.dockerload命令使用dockerload命令可以加載導出的鏡像包到本地倉庫中。將使用dockersave命令生成的centos7.tar文檔導入到本地倉庫中。1)查看本地鏡像倉庫,確認沒有centos:7鏡像。2)使用dockerload命令將tar包導入到本地鏡像倉庫。3)再次查看本地鏡像倉庫,確認centos:7鏡像包被導入成功。也可以使用“<”符號導入鏡像。[root@localhost~]#dockerimages[root@localhost~]#dockerload-icentos7.tar[root@localhost~]#dockerimages[root@localhost~]#dockerload<centos7.tar5.搜索鏡像常見的鏡像搜索方式有兩種,第一種是通過dockersearch命令行方式搜索,第二種是直接在DockerHub官方網站上直接搜索。從DockerHub查找所有鏡像名包含centos,并且收藏數大于20的鏡像。在DockerHub網站上直接搜索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提供一個注冊服務器Registry來保存多個倉庫Repository。Docker倉庫可以很方便的進行鏡像的存儲、分發(fā)和更新等管理操作。一般來說,倉庫有以下幾種:DockerHub:當前最大的Docker鏡像倉庫,也是官方鏡像倉庫。內部私有鏡像倉庫:用戶在內部創(chuàng)建的私有倉庫。在本地局域網搭建,類似公共倉庫。第三方鏡像倉庫:第三方公司設置的鏡像倉庫。1.Docker倉庫簡介在DockerHub官方鏡像倉庫中注冊賬號,并使用。DockerHub的注冊界面填寫DockerID,Email,Password等信息,并點擊SignUp。1.Docker倉庫簡介在DockerHub官方鏡像倉庫中注冊賬號,并使用。登錄成功后,即可進入DockerHub官網的個人頁面。在創(chuàng)建Repository時,設置名為ubuntu。之后就可以把ubuntu相關的鏡像推送到此處。2.Registry私有倉庫的搭建和使用在實際應用中,除了使用DockerHub可以共享鏡像倉庫,還可以自己搭建私有的鏡像倉庫。在企業(yè)中,為了避免商業(yè)項目被暴露,一般選擇部署自己的私有鏡像倉庫。以下以兩個節(jié)點為例給出部署私有鏡像倉庫的步驟:環(huán)境:準備兩臺安裝好Docker的服務器。服務器端機器:Docker私有倉庫服務器,運行Registry容器;客戶端機器:已經安裝Docker的普通服務器,在這臺服務器上下載一個測試鏡像,然后上傳到Registry服務器進行測試。2.Registry私有倉庫的搭建和使用服務器端操作:1)在私有倉庫服務器上快速創(chuàng)建鏡像倉庫。2)使用dockerps-l命令查看容器情況。3)查看剛剛創(chuàng)建的鏡像倉庫中是否有鏡像文件。4)查看本服務器的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)在客戶端機器上下載一個nginx:latest鏡像,并標記為私有倉庫的版本。2)在客戶端配置私有倉庫的可信任設置,以便可以通過HTTP直接訪問。3)將剛剛標記的鏡像推送到私有倉庫中。4)在服務器端查看倉庫中的鏡像列表。[root@localhost~]#dockerpullnginx:latest[root@localhost~]#vi/etc/docker/daemon.json{"insecure-registries":["03:5000"]//服務器的IP和端口}[root@localhost~]#systemctlrestartdocker[root@localhost~]#dockerpush03:5000/nginx:latest[root@localhost~]#curl:5000/v2/_catalog{"repositories":["nginx"]}Docker容器Docker容器基礎創(chuàng)建與啟動容器查看容器分發(fā)容器進入容器內部容器其他操作051.Docker容器基礎Docker容器是基于鏡像運行的一個輕量級的環(huán)境??梢园袲ocker容器簡單理解為在沙盒中運行的進程。這個沙盒包含了該進程運行所必須的資源,包括文件系統(tǒng)、系統(tǒng)類庫和SHELL環(huán)境等,但這個沙盒默認不會運行任何程序。用戶需要在沙盒中運行一個進程來啟動某一個容器,這個進程是該容器的唯一進程。Docker容器有以下兩種運行態(tài):前臺交互式:容器運行在前臺。后臺守護式:容器運行在后臺。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)建一個交互式容器,并查看容器當前目錄。使用鏡像文件ubuntu:16.04啟動一個后臺守護式容器,讓其在后臺一直輸出hellodocker。1.啟動后臺守護式容器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命令。列出當前所有正在運行的容器。列出最近創(chuàng)建的一個容器。列出最近創(chuàng)建的5個容器信息。[root@localhost~]#dockerps[root@localhost~]#dockerps-l[root@localhost~]#dockerps-n54.分發(fā)容器容器可以導出、導入,dockerexport和dockerimport則是容器的導出導入命令。容器導出命令容器導出是指導出一個已經創(chuàng)建的容器到一個文件,不管此時這個容器是否處于運行狀態(tài),可以使用dockerexport命令。將容器exec1導出為一個文件1.tar。容器導入命令容器導入是指使用dockerimport命令將文件導入到本地倉庫成為鏡像,啟動鏡像就可以恢復容器。將剛剛創(chuàng)建的文件1.tar導入到本地鏡像倉庫,名為import1。[root@localhost~]#dockerimport1.tarimport1[root@localhost~]#dockerexportexec1-o1.tar5.進入容器內部1.dockerattach命令dockerattach可以attach到一個已經運行的容器的stdin,然后進行命令執(zhí)行的動作。1)以交互方式運行一個容器attach1,使用ls命令查看容器當前目錄下的內容,然后用ctrl+P+Q來退出但是不結束交互式容器。2)使用ps命令查看容器的狀態(tài)是否是正在運行。3)使用dockerattach加上容器的id號或名字,再次進入容器。[root@localhost~]#dockerrun--nameattach1-itcentos:7/bin/bash[root@localhost~]#dockerps–l[root@localhost~]#dockerattachattach15.進入容器內部2.dockerexec命令利用dockerexec命令也可以進入一個已經運行的容器,然后進行命令執(zhí)行的動作。1)以守護式方式運行一個容器exec1。2)使用ps命令查看容器的狀態(tài),使用logs命令查看容器的日志。3)使用dockerexec加上容器的ID號或名字,以交互方式進入容器。[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.容器其他操作容器停止:指停止一個正在運行的容器。停止一個正在運行的容器exec1。[root@localhost~]#dockerkillexec1[root@localhost~]#dockerstopexec1容器殺死:是指快速停止一個容器,類似于強制結束。殺死一個正在運行的容器exec1。容器刪除:容器的刪除是指刪除一個或多個容器。用-f選項來強制刪除一個正在運行的容器exec1。刪除容器exec1,并刪除容器掛載的數據卷。[root@localhost~]#dockerrm-fexec1[root@localhost~]#dockerrm-vexec1Docker網絡Docker網絡基礎Docker網絡模式Bridge模式下容器間互連Bridge模式下容器與外部網絡連接061.Docker網絡基礎Docker默認網絡主要是由NetworkNamespaces、VethPair、LinuxBridge和Iptables技術等來實現的。NetworkNamespaces:實現了網絡隔離。VethPair:打穿了隔離環(huán)境中的網絡數據傳輸通道。LinuxBridge:宿主機上的網橋,用于在容器之間進行數據的轉發(fā)。Iptables:提供網絡數據穿透等功能,也可以利用它實現網絡防火墻等功能。Docker守護進程通過docker0為容器提供網絡服務。docker0是Linux的虛擬網橋,是數據鏈路層的設備。默認情況下容器是無法與外部通信互聯的,需要在創(chuàng)建容器時加上相應的參數實現端口映射,這就是dockerrun的-p參數。1.Docker網絡基礎啟動一個nginx服務,將宿主機的端口8000映射到容器內部80端口??梢栽谒拗鳈C瀏覽器上訪問:8000[root@localhost~]#dockerrun-d-p8000:80--nametest1nginx:alpine2.Docker網絡模式Docker主要有以下四種網絡模型:1.Host:刪除容器和Docker主機之間的網絡隔離,并直接使用主機的網絡。2.None:禁用所有網絡。3.Joined:處于這個模式下的Docker容器會共享其它容器的網絡環(huán)境,因此,至少這兩個容器之間不存在網絡隔離,而這兩個容器又與宿主機以及除此之外其他的容器存在網絡隔離。4.Bridge:默認網絡驅動程序。當你的應用程序在需要通信的容器中運行時,通常會使用橋接網絡。Docker內置bridge、host和none三個網絡。2.Docker網絡模式1.Host模式Host模式沒有為容器創(chuàng)建一個隔離的網絡環(huán)境,該模式下的Docker容器會和宿主機共享同一個網絡Namespace。創(chuàng)建一個網絡模式為host的容器。1)創(chuàng)建網絡模式為Host的容器b1。2)在容器b1內部用ifconfig查看網絡狀況。[root@localhost~]#dockerrun--nameb1--networkhost-it--rmbusybox/#ifconfig2.Docker網絡模式1.Host模式創(chuàng)建一個網絡模式為host的容器。3)在容器內部,在/tmp目錄下新建文件index.html,并寫入數據。啟動httpd,并查看相應端口。4)在宿主機瀏覽器上,查看index.html。/#echo"Thisisatest.">/tmp/index.html/#httpd-h/tmp//#netstat-nat|grep80tcp03205:5348010:443LAST_ACKtcp00:::80:::*LISTEN2.Docker網絡模式2.None模式當網絡模式為None模式時,表示Docker容器擁有自己的NetworkNamespace,但并未對Docker容器進行任何網絡配置。創(chuàng)建一個網絡模式為None的容器b2,并查看網絡狀況。[root@localhost~]#dockerrun-it--nameb2--networknone--rmbusybox/#ifconfig2.Docker網絡模式3.Joined模式Joined模式指定新創(chuàng)建的容器和已經存在的一個容器共享一個NetworkNamespace。創(chuàng)建一個網絡模式為Joined的容器,并查看網絡狀況。1)創(chuàng)建一個容器b3,用hostname查看主機名,ip命令查看網絡情況。2)創(chuàng)建一個Joined模式的容器b4,與b3共享網絡情況,用hostname查看主機名,ip命令查看網絡情況,發(fā)現容器b4的主機名和網絡狀況與b3一致。[root@localhost~]#dockerrun--nameb3-it--rmbusybox/#hostname449ea8bd730b/#ipa[root@localhost~]#dockerrun--nameb4-it--networkcontainer:b3--rmbusybox/#hostname449ea8bd730b/#ipa2.Docker網絡模式3.Joined模式創(chuàng)建一個網絡模式為Joined的容器,并查看網絡狀況。3)在容器b3內部,在/tmp目錄下新建文件index.html,并寫入數據,啟動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網絡模式4.Bridge模式Bridge模式是Docker的默認網絡模式,不寫--net參數,就是Bridge模式。容器創(chuàng)建時,在主機上創(chuàng)建一對虛擬網卡vethpair設備,Docker將vethpair設備的一端放在新創(chuàng)建的容器中,命名為eth0(容器的網卡),另一端放在宿主機中,命名為veth***,并將這個網絡設備加入到docker0網橋中。2.Docker網絡模式4.Bridge模式創(chuàng)建一個Bridge模式容器,在宿主機上和容器內部查看網絡接口情況。1)安裝網橋管理工具。2)查看網橋設備docker0,此時沒有相應的網絡接口。3)開啟一個交互式容器b5。4)進入容器內部,使用ifconfig命令查看Docker網絡情況。5)用Ctrl+p+q退出容器但是保持容器的繼續(xù)運行,并在宿主機中查看網絡情況。[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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 起重機司機(限門式)特種作業(yè)考試重點題庫300題(附答案)
- 硫酸廠硫精砂制酸開停車方案
- 水電企業(yè)工程安全生產目標管理制度
- 林業(yè)資源信息管理系統(tǒng)建設方案
- 初中畢業(yè)班主任發(fā)言稿
- DB2102T 0128-2024 柞蠶蛹蟲草多肽提取技術規(guī)程
- NAD-Standard-生命科學試劑-MCE
- Myristoleyl-arachidonate-生命科學試劑-MCE
- Mulberry-Extract-生命科學試劑-MCE
- 城市軌道交通客運組織學習通超星期末考試答案章節(jié)答案2024年
- SpaceClaim.中文教程完整版
- 新生兒足底血采集技術評分標準
- 鏡眼距對矯正視力的影響 省賽獲獎
- 中建項目經濟活動分析作業(yè)指導書
- 面向品牌供應鏈的綠色物流方案最佳實踐
- 2022年江西省書記員招聘筆試試題及答案解析
- 宅基地行政復議申請書范本,行政復議申請書格式
- 牙齒大班教案
- 讀后續(xù)寫:愛與善良-面冷心熱的老婦人 講義-高考英語作文備考
- 新視野大學英語4第三版第四冊第四單元教案演示教學
- 壓路機操作工考試題庫
評論
0/150
提交評論