容器初識--Docker

這個階段閒來無事,爲了不荒度光陰,總得找點事情來做做或者學習下其他的東西,也是一閃靈光,打算學習虛擬技術,從Docker開始吧。

什麼是docker呢,官方定義:docker是以Docker容器爲資源分割和調度的基本單位,封裝了整個軟件運行時環境,爲開發者和系統管理者而設計的,用於構建、發佈和運行分佈式應用的平臺。它是一個跨平臺、可移植並簡單易用的容器解決方案。

我搞了一段時間,目前的理解就是:在系統中被單獨隔離出來的一個資源單位,你可以在這個資源單位中幹你想幹的事情。對於容器及其docker的理解,不是建立在表面的文字描述,而是在實踐的基礎上,進行總結和歸納,誠然,我的總結也可能有一定的侷限性,就學習而言,理解內涵首當其中,操作實踐是爲深入。對於運維而言,docker提供了很大的幫助。

對於他的優點,沒有真正意義上的使用過,是不能知曉的,所謂可移植性、跨平臺、高資源利用率等等只有使用過才知道。

爲什麼從docker開始入手呢,除了方便藉助SEL實驗室出的那本書(書寫的很不錯,值得推薦),還有蒐羅各式各樣的資料和技術博客來學習。當前,docker幾乎是容器的代名詞,很多人以爲docker就是容器。其實,這是錯誤的認識,除了docker 還有coreos。所以,容器世界裏並不是只有docker一家。既然不是一家就很容易出現分歧。任何技術出現都需要一個標準來規範它,不然各搞各的很容易導致技術實現的碎片化,出現大量的衝突和冗餘。因此,在2015年,由Google,Docker、CoreOS、IBM、微軟、紅帽等廠商聯合發起的OCI(Open Container Initiative)組織成立了,並於2016年4月推出了第一個開放容器標準。標準主要包括runtime運行時標準和image鏡像標準。標準的推出,有助於替成長中市場帶來穩定性,讓企業能放心採用容器技術,用戶在打包、部署應用程序後,可以自由選擇不同的容器Runtime;同時,鏡像打包、建立、認證、部署、命名也都能按照統一的規範來做。

兩種標準主要包含以下內容:

  1. 容器運行時標準 (runtime spec)

a). creating:使用 create 命令創建容器,這個過程稱爲創建中 b). created:容器創建出來,但是還沒有運行,表示鏡像和配置沒有錯誤,容器能夠運行在當前平臺 c). running:容器的運行狀態,裏面的進程處於 up 狀態,正在執行用戶設定的任務 d). stopped:容器運行完成,或者運行出錯,或者 stop 命令之後,容器處於暫停狀態。這個狀態,容器還有很多信息保存在平臺中,並沒有完全被刪除

  1. 容器鏡像標準(image spec)

a). 文件系統:以 layer 保存的文件系統,每個 layer 保存了和上層之間變化的部分,layer 應該保存哪些文件,怎麼表示增加、修改和刪除的文件等; b). config 文件:保存了文件系統的層級信息(每個層級的 hash 值,以及歷史信息),以及容器運行時需要的一些信息(比如環境變量、工作目錄、命令參數、mount 列表),指定了鏡像在某個特定平臺和系統的配置。比較接近我們使用 docker inspect 看到的內容; c). manifest 文件:鏡像的 config 文件索引,有哪些 layer,額外的 annotation 信息,manifest 文件中保存了很多和當前平臺有關的信息; d). index 文件:可選的文件,指向不同平臺的 manifest 文件,這個文件能保證一個鏡像可以跨平臺使用,每個平臺擁有不同的 manifest 文件,使用 index 作爲索引。

這麼冗長和複雜的標準,我是硬着頭皮看完的,能理解一些,要深入理解的話,須得動手操作。

就從安裝開始吧!

1.安裝docker

我是在基於Debian的KaliLinux中學習和安裝的,Ubuntu命令什麼的和它都一樣。鍵入安裝命令:

apt insatall docker *

爲了防止缺少依賴關係,我特地的加上通配符 ‘*’,表示安裝以docker開頭的所有東西。

安裝成功後進行一些基本命令的使用,可能你在安裝中會出現些許問題,或者是命令鍵入錯誤,或是更新源有問題、或是其他內核的Linux命令不一致等等,耐心看錯誤提醒,搜尋解決辦法。

查看環境信息:

docker info

 仔細看,你剛安裝的docker容器信息、鏡像信息、服務器版本等等好多信息都可以看見

2.生命週期管理

包括docker的啓動、停止、重啓等。

開啓docker:service docker start即可。即開啓容器docker這個服務。

有幾個重要的命令:

1)核心命令之一。使用docker run --help查看可用選項,有很多命令,初期是用不到的,先做了解

docker run 

這個命令用來基於特定的鏡像創建一個容器,並根據選項來控制該容器。使用docker run時,Docker將自動爲每個新容器分配唯一的ID作爲標識。

此時就創建並且運行了一個新的docker,順便使用--name命名爲helloworld。

2)既然分配了唯一ID,那就得知道它的ID、name、創建時間運行狀態等其他信息。

docker ps -a

一目瞭然,十分清楚,這條命令也很常用。

docker ps是列出當前運行的容器,加上-a參數是列出所有已經創建的容器

3)容器的開啓、停止重啓

docker start/stop/restart

比較簡單,不舉例

4)從鏡像倉庫中下載各種需要的鏡像

docker pull

Docker Registry是存儲容器鏡像的倉庫。

docker官方倉庫有許多即拿即用的鏡像資源,通過pull可以有效利用。體現“一次編譯,到處運行”特性

使用pull時可以從官方、私人、其他公共庫獲取鏡像。

如獲取Ubuntu的鏡像:

docker push:將本地的image或者repository推送到官方等鏡像庫中。和docker pull相反。

5)查詢已存在的鏡像

docker images

我已經下了好幾個,爲後面的簡單練習做準備,只不過下載的比較慢,因爲倉庫的話不是國內的,如果中斷,重複下載即可。

根據ID確定具體容器,也可以使用容器名來確定。

使用-i來開啓交互模式,始終保持輸入流開放。

使用-a附加標準輸入、輸出或錯誤輸出。

此外docker stop 或者docker restart 可以使用-t來設定時間

3.容器的運維操作

容器的操作是重中之重,Docker爲用戶提供了豐富的容器運維操作命令

1)attach:對開發人員特別有用,可以轉到正在運行的容器,觀察該容器的運行情況,或與容器的主進程進行交互。

先查看正在運行的docker,然後選擇要連接的docker的ID,前幾位即可,不必全部把ID打出來,再docker attach。

2)inspect:查看鏡像和容器的詳細信息,默認會列出所有信息,可以通過format參數來指定輸出的格式

docker inspect

3)ps:查看容器相關信息,-a查看所有容器,-l查看最新創建容器,包括不在運行中的容器.這個提過,不再贅述。

4.其他子命令:

commit:可以將容器固話成一個新的鏡像

events、history、logs

用於查看系統日誌信息:events會打印實時系統事件;history指定鏡像的歷史版本信息;logs進程運行日誌

這些不太常用,瞭解下即可。

一些常用操作:

docker stop $(docker ps -aq):停止所有容器

docker rm $(docker ps -aq):刪除所有容器

docker rmi $(docker images -aq):刪除所有鏡像

docker image prune --force --all:刪除不使用的鏡像

docker container prune -f:刪除所有停止的容器

docker ps -aq:列出所有容器Id

爲什麼說常用呢,因爲剛開始配置一些環境和容器,會碰到好些未知錯誤,也無從解決,只能刪掉,然後重新搞,再慢慢找出問題所在,後面刪的多了,重新搞的多了也就慢慢知道了哪裏有問題,也就會解決了。

對於docker初期的瞭解認識以及簡單的操作命令大概就是這個樣子,多做練習,理解方能深入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章