天天看點

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic建構和部署》——1.2 了解容器的組成

本節書摘來自異步社群《docker容器:利用kubernetes、flannel、cockpit和atomic建構和部署》一書中的第1章,第1.2節,作者: 【美】christopher negus(克裡斯托弗•尼格斯)著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

docker是docker項目開發的一種容器格式。docker指令能夠運作、停止、啟動、調查容器,還能操縱容器。docker指令也可以作為服務守護程序運作,處理管理docker容器的請求。預設情況下,這個docker服務會從docker hub registry擷取你請求的鏡像。雖然你無需知道更多就可以開始使用,但接下來會依次給出一些額外的資訊。

1.2.1 docker項目

docker項目為docker開發提供了一個中心。它将docker稱為“一個針對分布式應用開發者和系統管理者的開放平台”,旨在簡化應用程式的開發和分發。

solomon hykes是docker的創始人和cto。他将docker要在軟體行業做的事情與實體集裝箱為航運業所做的事情進行了對比。無論是運輸汽車、圓桶、箱子,還是運輸鋼琴,隻要使用标準的集裝箱來運輸這些不同類型的物品,用來運送和處理它們的工具也可以被标準化。

是以,就其核心而言,docker項目提供了一種軟體容器的格式并建立了一個專為使用該格式的軟體而搭建的簡單的基礎設施。随着項目的進行,它開始超出其最初所關注的穩定docker格式以及提供工具來管理單個容器。

如今,docker項目正将其範圍擴充至包含配置與編排工具,來幫助人們部署和管理成組的容器。該項目還研究管理計算資源的方式,并提供高可用性的方式來幫助運作docker容器。随着這些工具變得可用,它們将不得不與谷歌和red hat這樣的公司正開發的更成熟的容器編排工具(包括本書涵蓋的kubernetes項目的工具)正面交鋒。

然而,目前docker項目的最大成就是docker容器格式、管理單個容器的工具,以及在docker用戶端和registry之間拉取和推送docker容器鏡像的能力。docker項目管理的中央registry被稱為docker hub registry。

1.2.2 docker hub registry

docker hub registry提供了個人與組織儲存和開發其docker容器鏡像的地方。當你的linux系統上安裝了docker的時候,如果你請求的docker容器鏡像尚未在你的系統中,預設情況下docker會檢視docker hub registry。

圖1-1展示了docker hub registry頁面。

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic建構和部署》——1.2 了解容器的組成

圖1-1 docker hub registry儲存了數以千計的docker鏡像

通過注冊docker使用者賬号,你可以擁有自己的docker repository,你可以把docker容器鏡像推送到這裡。之後,隻要連接配接了網際網路,你就可以從任何運作docker的系統拉取這些鏡像。

linux發行版和應用項目在docker hub registry上有官方的repository。除了docker容器鏡像本身,多數情況下,你也能在docker hub registry上查找使用這些鏡像的說明以及用來建構這些鏡像的dockerfile檔案。對于不想公開共享的容器鏡像,也有辦法建立你自己的docker registry,你可以用它來私密地儲存鏡像或者直接從docker項目購買安全的容器存儲空間。

你也許注意到,當描述docker存儲和傳輸軟體所用的格式時,會出現“鏡像”和“容器”這樣的詞。當使用docker時,了解鏡像和容器之間的差别是非常關鍵的。

1.2.3 docker鏡像和容器

容器化的目的是将應用程式運作需要的所有元件集合在一個單一而獨立的單元中。對于docker而言,這個單元被稱作docker鏡像。鏡像之中是容器要運作的應用程式以及應用程式執行所需的庫、配置檔案、可執行程式或者其他元件。

鏡像是一個靜态單元,它要麼在repository中,要麼在安裝了docker的本地檔案系統中,并等着被運作。與将docker鏡像存儲到repository中不同,将docker鏡像儲存到檔案系統時,它會被儲存為一個tarball檔案。這個tarball可以像其他檔案那樣傳輸,之後可以在運作docker的本地系統上被導入并作為容器運作。

像red hat enterprise linux、ubuntu、fedora和centos這樣的主要linux發行版都提供了官方的基礎鏡像,你可以使用它們建構自己的docker鏡像。即使不是程式員,也可以擷取基礎鏡像、向其中添加現有應用程式并将其制作為自己的鏡像。要做到這一點隻需建立dockerfile并在其上運作docker build指令。

docker容器這個術語指的是docker鏡像的運作執行個體,或者更為準确地說,是一個已運作的鏡像的執行個體,因為它此刻可能正在運作、暫停或者已經停止。開始使用docker時,鏡像和容器之間的差別非常關鍵。需要了解這個差別的原因在于,處理鏡像和處理容器有着不同的指令。

例如,當要檢視本地系統的鏡像清單時,要輸入docker images;要檢視正在運作的容器清單,要輸入docker ps(或是docker ps -a,檢視不再運作但還儲存在你的系統中的容器的清單)。

想從鏡像運作容器,要用docker run指令。想停止正在運作的容器,要用docker stop指令。在容器停止後,可以使用docker start指令再次啟動已停止的容器。隻是要暫停容器中的所有程序,要用docker pause指令。之後輸入docker unpause來再次啟動已暫停的容器。謹記,docker run從原始鏡像運作一個新容器,而docker start從容器被停止時的狀态重新啟動一個容器(例如,你添加的軟體或修改的檔案還在那兒)。

當使用容器時,你會注意到所有給出的示例都有一個共同點。它們中的每一個都要使用docker指令來調用。

1.2.4 docker指令

docker指令是你與docker容器和鏡像直接打交道所使用的主要指令。實際上,在docker軟體的一些軟體包中,docker``隻是為數不多的幾個可執行指令之一。

一旦按第2章的描述安裝了docker軟體,隻要啟動docker服務就能開始使用docker指令。docker指令内置的一個不錯的特性是tab自動補全(如果你是從預設的bash shell運作docker的話)。是以,一旦docker服務運作起來,你就可以作為root使用者輸入docker,緊跟着按下兩次tab鍵來檢視可用的docker子指令:

因為本書第二部分的多數章節專門講授docker如何與這些子指令一起使用,是以我不會花太多時間展示它們都是如何工作的。相反,我會概述能用它們做什麼。

查找docker元件的資訊:使用docker version展示docker特性的版本資訊。使用docker info檢視運作docker的系統的資訊。docker help檢視可以與docker指令一起使用的指令和選項。使用docker history展示鏡像的曆史。使用docker inspect檢視鏡像或容器的資訊。使用docker port列出容器的端口映射。

操作正在運作的容器:使用docker ps列出正在運作的容器。使用docker attach将另一個指令附加到正在運作的容器上。使用docker exec在正在運作的容器中執行指令。使用docker inspect審查容器的中繼資料。使用docker cp從容器向主控端系統複制檔案。使用docker diff檢查容器從啟動後其檔案系統所做的改變。

操作鏡像:使用docker images列出系統上的鏡像。使用docker run運作鏡像。使用docker pull從registry向本地系統拉取鏡像。使用docker push将鏡像推送到registry中。使用docker save将鏡像儲存為tarball。使用docker load從tarball檔案加載本地鏡像。使用docker export從容器中将檔案系統導出成本地系統的tarball檔案。

操作docker registry:使用docker search在registry中搜尋鏡像。使用docker login登入到docker hub registry(你就能用自己的賬号來推送和拉取鏡像)。使用docker logout從docker hub registry登出。

修改現存的鏡像:使用docker tag為鏡像添加一個名字。使用docker rename修改鏡像的名字。

修改容器的狀态:使用docker stop停止正在運作的容器。使用docker start啟動一個已經停止的容器。使用docker pause暫停容器。使用docker unpause重新啟動一個已經暫停的鏡像。使用docker kill向容器發送kill信号或其他信号。使用docker restart停止并重新啟動容器。

檢視docker的活動:使用docker events檢視docker伺服器的事件。使用docker top檢視容器的程序活動。使用docker logs檢視由容器産生的日志消息。使用docker stats檢視容器的cpu和記憶體使用統計。使用docker wait檢視容器直到它停止,然後列印它的退出代碼。

建立鏡像和容器:使用docker build從頭建構鏡像。使用docker commit從容器建立鏡像。使用docker create從鏡像建立容器但不運作它。使用docker import将檔案系統導入鏡像中。

删除容器和鏡像:使用docker rm删除已停止的容器。使用docker rmi删除鏡像。

盡管docker是專為幫你以最少的麻煩讓容器運作起來而設計的,本書在這裡會指導你完成docker的初次體驗,并指出你可能無法自己發現的有趣特性。之後,本書會帶你進入docker中一些很少被繪制的水域——與多容器的部署和管理相關。換句話說,本書為你提供了一種方法來進行docker探險。

繼續閱讀