docker預設提供了一些鏡像,在github上我們也可以找到很多已經做好的鏡像,但是不可避免大多數情況我們需要根據自己的需求來定制建構自己需要的鏡像。
Docker可以通過從Dockerfile(包含所有指令的文本檔案)中讀取建構映像所需的指令來自動建構映像。 Dockerfiles遵循特定格式并使用一組特定的說明。很多軟體版本也提供了Dockerfile檔案。它就像一個自動化的腳本一樣,幫我們設定好所需的鏡像功能。
手工建構鏡像
為了更好的了解Dockerfile,我們先不使用Dockerfile,純手工建構一個docker 鏡像。建構鏡像就是在鏡像中安裝一種服務,當容器使用這個鏡像運作時,就可以對外提供服務。
建構一個nginx服務的鏡像:
1、建立一個容器
2、進入容器,對容器進行定制
3、修改nginx配置檔案,我們讓nginx預設在前台啟動,這樣才能保證我們的docker容器持續運作不退出。(像nginx這中無狀态的服務,docker 單程序運作完畢後就會自動退出)
4、退出容器,送出鏡像
這裡的文法類似于git的commit 參數, nginx1表示的之前建立的容器名, trying表示使用者名稱可以任意填寫,nginx表示鏡像名稱,v1是tag标簽,這裡可以表示版本号。
檢視本地送出的鏡像:
5、以定制的鏡像啟動容器,最後的nginx參數為nginx服務的啟動指令:
檢視容器運作狀态:
這樣通過在外部使用ip+端口的通路方式就可以通路nginx了。
Dockerfile
Dockerfile制作容器鏡像非常簡單,隻要按照規則書寫Dockerfile檔案,然後在Dockerfile存放的路徑執行docker build . 即可。
警告:不要使用root目錄或/目錄作為build路徑,因為它将會建構硬碟驅動器的所有内容傳輸到Docker守護程式,docker的核心思想是一個容器一個程序(one process per container),是以不要在容器中安裝不必要的軟體工具包,這樣會使容器鏡像過于龐大。
確定Dockerfile在目前目錄下,如果不在也可以采用絕對路徑的方式,此外Dockerfile的首字母D必須大寫。在Dockerfile中#表示注釋資訊。
Dockerfile文法格式
我們使用Dockerfile對上面手工制作的鏡像重新定制一次:
建立Dockerfile目錄/docker/dockerfile/,編輯一個index.html的網頁檔案:
編寫Dockerfile:
使用build指令建構鏡像:
這裡-t參數指定了倉庫名稱和版本号,後面的路徑是Dockerfile檔案和添加的檔案所在的路徑。
檢視生成的鏡像:
使用此鏡像啟動一個容器:
由于在容器中沒有配置nginx前台運作,是以在啟動的時候指定前台啟動,在實際生産中,這些配置檔案都需要通過ADD去添加。
在其他機器上通路docker主控端:
在實際的生産中,對于無法解耦的複雜應用就不适合使用docker,docker 更多是提供微服務架構解決方案,對于一般的業務平台可以将虛拟機和容器混合使用。