如何輕鬆搞定基於Docker的容器化部署

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

鏡像

你可以簡單理解鏡像是一個壓縮包,這個包中,有你的程序或代碼,還有一個文件系統,所謂文件系統,就是打包了一個標準操作系統的所有必須文件,可執行程序、運行庫等。

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

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

b1183dab1c4049b9b9d0d0dff17d2eb04e8d9caf873f7ff505ff9fe8909e2a48Copy

可以簡寫做 b1183dab1c40

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

# Docker官方鏡像,省略了 Tag
ubuntu

# Docker官方鏡像,指定Tag
ubuntu:16.04

# Docker Hub上非Docker官方的鏡像
maichong/ubuntu:16.04

# 脈衝雲倉庫中的鏡像,帶鏡像倉庫地址
maichong.io/project/ubuntu:16.04Copy

可以使用 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 8080Copy

該文件中首先聲明瞭鏡像的基礎鏡像,一般情況下,你構建的鏡像需要依賴一個基礎鏡像,就像你在一個電腦上安裝軟件的前提是這個電腦已經有了一個操作系統。

然後Dockerfile中記錄着生成新鏡像的一個個步驟,包括拷貝文件、執行命令等。

Dockerfile中還包含着一些其他信息的聲明,比如環境變量、標註需要開放的端口等。

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

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

備份文件

可以使用 docker save 命令,將你電腦上生成的鏡像導出成tar打包文件,然後用來數據備份,或將文件拷貝到其他電腦上,用docker load 命令導入鏡像,實現鏡像的分發。

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

鏡像倉庫

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

通常我們所有用到的鏡像都來自Docker官方倉庫 http://hub.docker.com ,對於企業用戶,脈衝雲也提供了企業私有鏡像倉庫,你必須擁有指定項目的權限,並且通過 docker login maichong.io 登錄後才能向脈衝雲中推拉鏡像。

最後,作爲普通開發者,脈衝雲不要求記住全部的Docker概念和命令,只需要會編寫Dockerfile配置應用程序的環境即可

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