【云駐共創】華為云大咖帶你玩轉云原生基礎設施之容器技術
一、容器是什么

容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序可以在幾乎任何地方以相同的方式運行。
開發人員在自己開發環境創建并測試好的容器,無需任何修改就能夠在生產系統的虛擬機、物理服務器或公有云主機上運行。
如下圖所示,容器就像左圖中的集裝箱一樣,我們不需要去關心容器里的內容,它就是一種標準的運輸方式。
二、容器關鍵技術介紹
2.1容器與虛擬機
容器和虛擬機之間的主要區別在于虛擬化層的位置和操作系統資源的使用方式。
如左圖所示,虛擬機主要是通過Hypervisor層來建立一個區別于主機操作系統之外的一個Guest OS,它可以根據需求裝載一個完整的操作系統,而容器沒有虛擬機的Hypervisor層,Hypervisor層的主要作用是用來隔離或管理物理機中的資源,比如CPU、GPU、內存、硬盤等,這些由Hypervisor層進行分配,同時Guest OS在容器中也消失了,應用運行時直接調用Operating ?System的共用內核來抵消容器沒有Guest OS對應用運行的影響。容器和虛擬機相比,容器多了一個Docker,Docker是容器中的一個進程,它的作用就是輔助容器管理。
2.2容器規范
容器不光是Docker,還有其他容器,比如CoreOS的rkt。為了保證容器生態的健康發展,保證不同容器之間能夠兼容,包含Docker、CoreOS、Google在內的若干公司共同成立了一個叫Open Container Initiative ( OCI )的組織,其目是制定開放的容器規范。容器的規范主要分為兩方面:一個是容器打包規范,一個是容器運行規范,這也是Open Container Initiative ( OCI )的主要內容。
OCI容器規范主要包括兩部分內容:一個是runtime spec,它的作用是保證容器的可移植性,保證容器在任何地方都可以進行運行,另一個是image format spec,它的作用是保證容器的可操作性。OCI容器規范主要是以Docker的規范來制定的。
2.3容器runtime
runtime與操作系統kernel緊密協作,為容器提供運行環境。
常見的容器runtime有很多種,但是我們平常使用較多的是Docker :
1)runC是Docker公司2015年發布的容器runtime工具,符合OCI規范。runC是由Libcontainer演變而來。
2)rkt ,是CoreOS公司開發的Docker / runc的一個流行替代方案,符合OCI規范。
3)Kata ,2017年整合Clear Container和runV項目,基于虛擬化技術的容器實現,符合OCI規范。
4)gVisor ,2018年Google公司發布gVisor的項目,基于虛擬化技術的容器實現,符合OCI規范。
2.4 Docker Engine
Docker Engine主要分為三層,分別是server、REST API、Client。server也叫docker daemon,它是長期運行的程序,大部分的容器開啟或者存儲都會用到server,它是容器中比較重要的部分,它的作用是創建和管理容器的對象,比如容器的鏡像、容器本身、網絡等;第二層REST API,它的作用是Client和server的交互;第三層Client(也叫docker ?CLI)它是用戶進行直接交互的地方,用戶會發起命令,然后Client通過REST API和server進行交互。
2.5 Docker架構
如上圖所示,主要有Client、docker daemon、Registry三部分,docker daemon位于DOCKER_HOST主機上,Registry的意思是遠程倉庫。那么它們是如何工作的呢,例如Client里我們執行docker build生成一個鏡像,我們通過docker daemon知道需要ubuntu的鏡像來創建容器,我們首先會在自己的鏡像倉庫里尋找,如果倉庫里有ubuntu的鏡像,那么就可以直接以容器的方式開啟,如果我們沒有在自己的鏡像倉庫里找到這個鏡像,我們就會通過網絡在遠程倉庫里進行拉取,下載回主機當中,然后就可以開啟容器。docker daemon在容器中是很重要的,它除了上面提及的下載鏡像、開啟容器功能之外還有存儲和網絡功能。
2.6 ?Docker 容器實現原理
Docker容器通過namespace技術實現進程隔離,通過cgroup技術實現容器進程可用資源的限制。Docker啟動一個容器時,實際是創建了包含多個namespace參數的進程。
2.7容器鏡像
容器鏡像是容器的模板,容器是鏡像的運行實例,runtime根據容器鏡像創建容器。
容器鏡像掛載在容器根目錄下,為容器中的應用提供執行環境的文件系統。
容器鏡像打包了整個操作系統的文件和目錄(rootfs ),也包括應用本身。即應用及其運行所需的所有依賴都被封裝在容器鏡像中。
容器鏡像采用分層結構:
所有容器共享宿主機Kernel,并且不能修改宿主機Kernel。即容器運行過程中使用容器鏡像中的文件,使用宿主機OS上的Kernel。
2.8 Registry
Registry是存放容器鏡像的倉庫,用戶可進行鏡像下載和訪問,分為公有和私有兩類Registry。
公有鏡像倉庫:
Docker Hub 是Docker公司為公眾提供的托管Registry。
Quay . io現為Red Hat下的公共托管Registry。
私有鏡像倉庫:
企業可以用Docker ?Registry構建私有的Registry。
Registry本身是一個開源項目,可以用于搭建私有Registry。
三、使用Dockerfile構建鏡像
3.1如何構建鏡像
Dockerfile是一個文本文件,其內包含了一條條的指令,每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。
下圖是一個簡單的Dockerfile
3.2搭建私有Registry示例(1)
使用“registry”鏡像構建本地鏡像倉庫。registry是docker hub上維護的鏡像,其服務端口是5000。- V參數將宿主機的/root / myregistry目錄映射到容器的/var / lib / regisgtry目錄,用于存放鏡像數據。
使用dockertag命令修改鏡像名稱,使其符合registry上的格式要求。若要將鏡像上傳到registry ,鏡像名稱需要符合其命名格式要求:[ Registry - host ]:[ port ]/[ username ]/[ repository : tag]。
上傳容器鏡像到私有Registry。
3.3搭建私有 Registry 示例(2)
在Linux下,若使用如“192.168.137.99:1000”這樣的內網地址作為私有倉庫地址,則需要在/etc / docker / daemon . json 中寫入如下內容(如果文件不存在需新建該文件),然后重啟Docker服務。
四、容器生命周期管理
Docker run
以鏡像開啟容器,運行容器
Docker images
列出所有的鏡像,提示鏡像的名稱、號碼、版本等
Docker ps (- a )
展現整個容器
Docker stop Docker start
停止和開啟容器
Docker pause
暫停容器
Docker unpause
重新開啟容器
Docker rm
刪除容器
Docker attach or Docker exec
進入容器
五、華為云云原生入門級開發者認證介紹
5.1華為云開發者認證
云是ICT產業的未來,也是企業數字化轉型的底座,開發者是產業發展的靈魂,是業務創新的源頭,是技術發展的引領者。為了更好地服務千萬開發者,華為云推出開發者認證,真正讓開發者在云上作業,懂開發會開發,與開發者共成長。
5.2華為云開發者認證框架
華為云開發者認證體系,貼合數字產業生態戰略,在云原生、人工智能、大數據、物聯網、區塊鏈、移動開發、數據庫等技術領域建立賦能體系及認證標準,與人社部、工信部頒布的新興職業能力標準相匹配,提供清晰的開發者成長路徑。
5.3華為云云原生入門級開發者認證內容
5.4華為云云原生入門級開發者認證知識圖譜
本文整理自華為云社區【內容共創】活動第15期。
https://bbs.huaweicloud.com/blogs/345822
任務14:
華為云大咖帶你玩轉云原生基礎設施之容器技術
上云必讀 云原生 容器 鏡像服務
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。