263
技術社區[雲棲]
《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic構建和部署》——1.2 了解容器的組成
本節書摘來自異步社區《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic構建和部署》一書中的第1章,第1.2節,作者: 【美】Christopher Negus(克裏斯托弗•尼格斯)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.2 了解容器的組成
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頁麵。
圖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 <Tab><Tab>
attach exec inspect port rmi tag
build export kill ps run top
commit help load pull save unpause
cp history login push search version
create images logout rename start wait
diff import logs restart stats
events info pause rm stop
因為本書第二部分的多數章節專門講授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探險。
最後更新:2017-05-31 16:31:24