基於Docker和Kubernetes構建的部署管理和叢集管理

劉小波發表於2018-08-07

脈衝雲的部署管理和叢集管理底層基於Docker實現,簡單瞭解一下Docker。

其實脈衝雲對底層技術做了很好的封裝,你只需要瞭解到程式碼中的Dockerfile能構建成映象,映象儲存在脈衝雲的映象倉庫中,部署管理能將映象部署到你的伺服器節點上,然後你能線上檢視應用的執行狀態、控制啟停,這就夠了。

對 Docker 的瞭解,能讀懂下圖也就夠了,圖中有五個物件:映象、容器、映象倉庫、備份檔案、Dockerfile,並且有多個藍色字型標出的命令,用來將各種物件互相轉換、生成,接下來一一介紹:

基於Docker和Kubernetes構建的部署管理和叢集管理

映象

你可以簡單理解映象是一個壓縮包,這個包中,有你的程式或程式碼,還有一個檔案系統,所謂檔案系統,就是打包了一個標準作業系統的所有必須檔案,可執行程式、執行庫等。

Docker 之所以解決了程式執行環境一致性問題,就是將應用程式和檔案系統打包到了一起,程式執行時,從你打包的映象檔案系統中載入依賴,比如,你的程式依賴 JDK 1.8,那麼將映象中打包上 JDK1.8 的基礎庫,然後無論將映象部署到何種環境的系統上,無論那臺主機是否安裝了 JDK,或安裝了任意版本的 JDK,你的應用程式啟動時,都能一致性地載入映象中的 JDK1.8,避免了因環境不統一造成的部署難題和執行時 BUG。

可以通過 ID 或名稱識別映象,ID 是 SHA256 格式的 HASH 值,例如:

b1183dab1c4049b9b9d0d0dff17d2eb04e8d9caf873f7ff505ff9fe8909e2a48 
可以簡寫做 b1183dab1c40
複製程式碼

映象名稱分為映象名和 Tag 兩部分組成,中間以冒號分別,如果 Tag 省略,則代表 latest,比如:

# Docker 官方映象,省略了 Tag
Ubuntu
# Docker 官方映象,指定 Tag
ubuntu:16.04
# Docker Hub 上非 Docker 官方的映象 
maichong/ubuntu:16.04
# 脈衝雲倉庫中的映象,帶映象倉庫地址 
maichong.io/project/ubuntu:16.04
複製程式碼

可以使用 docker tag 命令給已經存在的映象打上一個新標籤,比如:

# 給 ubuntu:16.04 增加一個新標籤 maichong.io/project/ubuntu:16.04
docker tag ubuntu:16.04 maichong.io/project/ubuntu:16.04
複製程式碼

檢視當前系統中所有的映象列表:

> docker images
REPOSITORY  TAG  IMAGE ID  CREATED  SIZE 
ubuntu 16.04 e13f3d529b1a 6 days ago 115MB
複製程式碼

容器

可以簡單理解映象是“死的”,是磁碟上儲存的“靜態的”檔案,而容器,則是執行起來的、記憶體中的、“動態的”例項。當然,容器不一定是執行著的,容器也能停止。

通過 docker run 命令可以從一個映象啟動一個容器,一個映象可以啟動無限個容器副本,每個容器還互相隔離,可以將一個個容器理解成一個個虛擬機器,每個容器都有自己的 IP、檔案系統等等。

和虛擬機器相比,容器執行時雖然網路、檔案等資源是隔離的,但是共享主機的核心,即,Docker 沒有為每個容器都從頭啟動核心,而是在當前主機系統的核心中執行容器中的程式,這相對於 VM 虛擬機器有非常大的效能優勢,所以稱 Docker 為輕量虛擬化。

可以通過 docker start / docker stop / docker restart 控制容器的啟動、停止、重啟。

執行 docker commit 命令可以將正在執行的容器生成一個新版本的映象,但是推薦使用Dockerfile 生成映象。

Dockerfile

簡言之,Dockerfile 是生成映象的配置檔案,例如:

# 指定 tomcat 版本 
FROM tomcat:8.5.32-jre8

# 指定工作目錄 
WORKDIR /app

# 將打包後的 server.jar 拷貝到映象中
# 可以使用脈衝雲的編譯構建服務,線上將原始碼打包成 jar
ADD server.jar /app/server.jar

# 設定映象的啟動命令
CMD java -jar /app/server.jar

# 宣告需要監聽的埠 
EXPOSE 8080
複製程式碼

該檔案中首先宣告瞭映象的基礎映象,一般情況下,你構建的映象需要依賴一個基礎映象,就像你在一個電腦上安裝軟體的前提是這個電腦已經有了一個作業系統。

然後 Dockerfile 中記錄著生成新映象的一個個步驟,包括拷貝檔案、執行命令等。

Dockerfile 中還包含著一些其他資訊的宣告,比如環境變數、標註需要開放的埠等。

使用 docker build 命令,可以依照 Dockerfile 中記錄的步驟,一步步生成新的映象。

在正在執行的容器內執行一個個命令,安裝一個個軟體,然後執行 docker commit 也能生成一個新的映象,但是請不要這樣操作。因為,使用 Dockerfile 可以記錄下來映象的生成過程,並且能夠隨時調整其中的步驟,重新生成映象。這就是傳說中的基礎設施即程式碼,將基礎環境的配置當做軟體程式設計來進行。

備份檔案

可以使用 docker save 命令,將你電腦上生成的映象匯出成 tar 打包檔案,然後用來資料備份,或將檔案拷貝到其他電腦上,用 docker load 命令匯入映象,實現映象的分發。

但是,這樣操作非常麻煩,尤其是遠端傳輸。請使用映象倉庫來進行統一管理和分發。

映象倉庫

映象倉庫就是一個線上提供映象儲存的服務。使用 docker pull 從映象倉庫中拉取(下載)映象,使用 docker push 命令將本地映象推送(上傳)到映象倉庫中。

通常我們所有用到的映象都來自 Docker 官方倉庫 hub.docker.com ,對於企業使用者,脈衝雲也提供了企業私有映象倉庫,你必須擁有指定專案的許可權,並且通過 docker login maichong.io 登入後才能向脈衝雲中推拉映象。


相關文章