Docker學習筆記:docker基礎知識

Docker開源項目背景

Docker是基於Go語言實現的開源容器項目,Docker自發布以來,因爲其強大而靈活的功能,備受所有計算機界人士的關注,直到現在,多個相關開源組件項目的出現,逐漸使docker的生態體系變的完整起來。Docker的構想是要實現“Build,ship and Run Any App, Anywhere”,即通過對應用的封裝、分發、部署、運行生命週期進行管理,達到應用組件級別的“一次封裝,到處運行”。這裏的應用組件,即可以是一個web應用、一個編譯環境,也可以是一套數據庫平臺服務,甚至是一個操作系統或集羣。

Docker在運維與開發中的優勢

對開發和運維人員(DevOps)來說,最夢寐以求的效果可能就是一次創建或配置,之後可以在任何地方、任意時間讓應用正常運行,而Docker正是實現這一終極目標的“瑞士軍刀”。主要有以下幾方面優勢:
更快速的部署與交付: 使用Docker,開發人員可以使用鏡像來快速構建一套標準的開發環境;開發完成後,測試和運維人員可以直接使用完全相同的環境來部署代碼。只要是開發測試過的代碼,就可以確保在生產環境無縫運行。Docker可以快速創建和刪除容器,實現快速迭代,節約開發、測試、部署的大量時間。
更高效的資源利用: 運行Docker容器不需要額外的虛擬化管理程序的支持,Docker是內核級的虛擬化,可以實現更高的性能,同時對資源的額外需求很低。與傳統虛擬機方式想比,Docker的性能要提高1—2個數量級。
更輕鬆的遷移和擴展: Docker容器幾乎可以在任意平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等,同時支持主流平臺的操作系統發行版本。
更簡單的更新管理: 使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分發和更新,從而實現自動化並且高效的容器管理。

Docker與虛擬機的比較

作爲一種輕量級的虛擬化方式,Docker在運行上跟傳統的虛擬機方式想比具有如下顯著優勢:

特性 容器 虛擬機
啓動速度 秒級 分鐘級
性能 接近原生 較弱
內存代價 很小 較多
硬盤使用 一般爲MB 一般爲GB
運行密度 單機支持上千個容器 一般幾十個
隔離性 完全隔離 完全隔離
遷移性 優秀 一般

Docker的三大核心概念

Docker大部分的操作都圍繞着它的三大核心概念:鏡像、容器、和倉庫。

Docker鏡像

Docker鏡像類似於虛擬機鏡像,可以將它理解爲一個只讀模板。例如,一個鏡像可以包含一個基本的操作系統環境,裏面僅安裝了Apache應用程序,我們就可以將它稱做一個apache鏡像。鏡像是創建Docker容器的基礎

Docker容器

Docker容器類似於一個輕量級的沙箱,Docker利用容器來運行和隔離應用。容器是從鏡像創建的應用運行實例。它可以啓動、開始、停止、刪除,而這些容器都是彼此相互隔離、互不可見的。可以把容器看作一個簡易版的Linux系統環境(包括root權限、進程空間、用戶空間和網絡空間等)以及運行在其中的應用程序打包而成的盒子。
鏡像自身是隻讀的。容器在從鏡像中啓動時,會在鏡像的最上層創建一個可寫層。

Docker倉庫

Docker倉庫類似於代碼倉庫,是Docker集中存放鏡像文件的場所。
有時候我們會將Docker倉庫和倉庫註冊服務器混爲一談,並不嚴格區分。實際上,倉庫註冊服務器是存放倉庫的地方,其上往往存放着多個倉庫。每個倉庫集中存放某一類鏡像,往往包括多個鏡像文件,通過不同的標籤(tag)來進行區分。根據所存儲的鏡像公開分享與否,Docker倉庫可以分爲公開倉庫和私有倉庫兩種形式。
目前,最大的公開倉庫是官方的Docker Hub,其中存放着數量龐大的鏡像供用戶下載。國內不少雲服務提供商(如騰訊雲、阿里雲等)也提供了倉庫的本地源,可以提供穩定的國內訪問。
當然,如果不希望公開分享自己的鏡像文件,Docker也支持用戶在本地網絡內創建一個只能自己訪問的私有倉庫。
當創建了自己的鏡像之後,就可以使用push命令將其上傳到指定的公有或者私有倉庫。這樣用戶下次在另外一臺機器上使用該鏡像時,只需要將其從倉庫上pull下來就可以了。

Docker的安裝

一、打開所給的鏈接,下載到我們需要的兩個rpm包
http://yum.dockerproject.org/repo/main/centos/7/Packages/
在這裏插入圖片描述
二、下載完成後,直接使用yum進行安裝(yum install * -y),使用yum安裝可以自動將一些依賴性安裝
在這裏插入圖片描述
三、打開服務並查看版本
在這裏插入圖片描述
四、安裝好docker後,ip addr 查看會發現docker多了一個自己的網卡和IP,這就表示我們將docker裝好了
在這裏插入圖片描述

鏡像的管理

docker search                                  ###查詢鏡像
docker pull                                    ###拉取鏡像
docker push                                    ###推送鏡像
docker images                                  ###查看本地鏡像
docker inspect  ubuntu                         ###查看ubuntu鏡像詳情
docker save ubuntu > ubuntu.tar                ###導出鏡像
docker load -i ubuntu.tar                      ###導入鏡像
docker commit                                  ###更新鏡像
docker rmi | docker image rm                   ###刪除鏡像

1、獲取鏡像
我們可以使用docker [image] pull命令直接從Docker Hub鏡像源來下載鏡像。該命令的格式爲docker [image] pull NAME[:TAG].
其中,NAME是鏡像倉庫名稱(用來區分鏡像),TAG是鏡像的標籤(往往用來表示版本信息)。通常情況下,描述一個鏡像需要包括“名稱+標籤”信息。
例如,獲取一個Ubuntu 18.04系統的基礎鏡像可以使用命令:
docker pull ubuntu:18.04
在這裏插入圖片描述
對於Docker鏡像來說,如果不顯示指定TAG,則默認會選擇latest標籤,這會下載倉庫中最新版本的鏡像。
我們來獲取一個最新的ubuntu鏡像:
在這裏插入圖片描述
注意:一般來說,鏡像的latest標籤意味着該鏡像的內容會跟蹤最新版本的變更而變化,內容是不穩定的。因此,從穩定性上考慮,不要在生產環境中忽略鏡像的標籤信息或使用默認的latest標記的鏡像。

2、查看鏡像信息
2、1.使用images命令列出鏡像
使用docker images或者docker image ls命令可以列出本地主機上已有鏡像的基本信息:
在這裏插入圖片描述
在列出的信息中,可以看到以下幾個字段信息:
(1):來自於哪個倉庫:比如ubuntu表示ubuntu系列的基礎鏡像;
(2):景象的標籤信息,表示鏡像的版本信息,標籤只是標記,並不能表示鏡像內容;
(3):鏡像的ID(唯一標識鏡像),如果有兩個鏡像的ID相同,說明他們實際上指向了同一個鏡像,只是具有不同標籤名稱而已;
(4):創建時間,說明鏡像最後的更新時間;
(5):鏡像大小,優秀的鏡像往往體積都比較小。

2、2. 使用tag命令添加鏡像標籤
爲了方便在後續工作中使用特定鏡像,還可以使用docker tag命令來爲本地鏡像任意添加新的標籤。例如,添加一個新的myubuntu:latest鏡像標籤:
在這裏插入圖片描述
可以看到,myubuntu鏡像的ID與ubuntu鏡像的ID是完全一致的,它們實際上指向了同一個鏡像文件,只是別名不同而已。這個其時就類似於linux中的軟鏈接。

2、3.使用inspect命令查看詳細信息
使用docker [image] inspect命令可以獲取該鏡像的詳細信息,包括製作者、適應架構、各層的數字摘要等:
docker [image] inspect ubuntu:18.04
在這裏插入圖片描述
上面的代碼返回的是一個JSON格式的消息,如果我們只要其中一項內容時,可以用-f來指定,例如,獲取鏡像的Architecture:
在這裏插入圖片描述
2、4.使用history命令查看鏡像歷史
既然鏡像文件由多個層組成,那麼怎麼知道各個層的內容具體是什麼呢?這個時候可以用history子命令,該命令會列出各層的創建信息。
例如:查看ubuntu:18.04鏡像的創建過程,可以使用命令:
在這裏插入圖片描述
注意,過長的命令被自動截斷了,可以使用前面提到的–no-trunc選項來輸出完整命令。

3、搜尋鏡像
使用docker search命令可以搜索Docker Hub官方倉庫中的鏡像。語法爲docker search [option] keyword。支持的命令選項包括:

-f,	--filter filter:		過濾輸出內容;
--format string:			格式化輸出內容;
--limit int:				限制輸出結果個數,默認爲25個;
--no-trunc:					不截斷輸出結果。

例如:搜索官方提供的帶nginx關鍵字的鏡像,如下所示:
在這裏插入圖片描述
搜索所有收藏數超過4的關鍵詞包括tensorflow的鏡像:
在這裏插入圖片描述
4、刪除和清理鏡像
4、1.使用標籤刪除鏡像
使用docker rmi或者docker image rm命令可以刪除鏡像,命令格式爲docker rmi IMAGE [IMAGE…],其中IMAGE可以爲標籤或者ID。
支持選項:

-f,-force:強制刪除鏡像,即使又容器依賴它;
-no-prune:不要清理未帶標籤的父鏡像。

刪除myubuntu:latest鏡像,可以使用命令:
在這裏插入圖片描述
刪除該鏡像不會對本地ubuntu:latest鏡像產生影響,當同一個鏡像擁有多個標籤的時候,docker rmi命令只是刪除了該鏡像多個標籤中的指定標籤而已,並不影響鏡像文件。當鏡像僅剩最後一個或者只有一個的時候,通過docker rmi命令刪除鏡像,就可以看出會刪除這個鏡像文件的所有文件層:
在這裏插入圖片描述
4、2.使用鏡像ID來刪除鏡像
當使用docker rmi命令,並且後面跟上鏡像的ID(也可以是能進行區分的部分ID串前綴)時,會先嚐試刪除所有指向該鏡像的標籤,然後刪除該鏡像文件本身。
注意:當有該鏡像創建的容器存在時,鏡像文件默認是無法被刪除的,我們需要使用-f參數來強制刪除,不過通常不推薦使用-f參數,而是先將創建的容器刪除之後再刪除鏡像。

4、3.清理鏡像
使用Docker一段時間後,系統可能會遺留一些臨時的鏡像文件,以及一些沒有被使用的鏡像,可以通過docker image prune命令來進行清理。

5、存出和載入鏡像
5、1.存出鏡像
如果要導出鏡像到本地文件,可以使用docker [image] save命令,該命令支持-o、-output string參數,導出鏡像到指定文件中。
例如,導出本地的ubuntu:18.04鏡像爲文件ubuntu_18.04.tar,如下所示:
在這裏插入圖片描述
5、2.載入鏡像
可以使用docker [image] load將導出的tar文件再導入到本地鏡像庫。支持-i、-input string選項,從指定文件中讀入鏡像內容。
例如,從文件ubuntu_18.04.tar導入到本地鏡像列表,可以使用命令:
docker load -i ubuntu_18.04.tar
或者
docker load < ubuntu_18.04.tar
這將導入鏡像及其相關的元數據信息(包括標籤等)。導入成功後,可以使用docker image命令進行查看,與原鏡像一致。

容器的管理

# docker run -it --name vm1 ubuntu bash        ###創建容器
# docker ps -a                                 ###查看容器進程
# docker attach vm1                            ###連接容器
# docker top vm1                               ###查看容器狀態
# docker logs vm1                              ###查看容器指令輸出 -f 參數可以實時查看
# docker inspect vm1                           ###查看容器詳情
# docker stats vm1                             ###查看容器資源使用率
# docker diff vm1                              ###查看容器修改
# docker run -d --name vm1 ubuntu bash -c "while true; do echo dream; sleep 1; done"            ###後臺運行,後面爲執行的命令。用docker attach vm1命令會一直輸出dream
# docker stop vm1                              ###停止容器
# docker start vm1                             ###啓動容器
# docker kill vm1                              ###強制幹掉容器
# docker restart vm1                           ###重啓容器
# docker pause/unpause vm1                     ###暫停/恢復容器
# docker rm vm1                                ###刪除容器
# docker export vm1 > vm1.tar                  ###導出容器
# docker import vm1.tar image                  ###導入容器爲鏡像 image
# docker container prune                       ###刪除所有未運行容器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章