[Docker] Hello~ Docker

首個Docker Web application,一起來對Docker說聲Hello吧

前言

在Docker的奇幻旅程開始之前,有幾個基本名詞必須先釐清一下

  • Docker Client
  • Docker Daemon
  • Docker Image
  • Docker Container

Docker的核心是Linux,當我們透過Docker Client輸入指令,Docker Client收到指令會進行解析,接著根據指示叫用Docker Daemon。

Docker Daemon負責擔任Client與Linux核心溝通的橋樑,並建立起Container。

Container顧名思義就是一個容器,Daemon會根據Client所給予的參數來決定容器的屬性,諸如network、pid、namespace之類的東西。

Image是映像檔,裡面包含應用程式和作業系統等內容,必須將Image注入到Container內,Container才有辦法產生功用。而注入的過程,Daemon會先檢查本機是否已下載相關的Image檔案,如果還未下載則會去遠端預設的Docker Registry下載。將Image下載完成之後便會注入到Container內,然後完成Container的啟動。

整體架構如下所示

 

對Docker 說聲 Hello  World吧

打開PowerShell 輸入以下指令

docker run -d -P training/webapp python app.py

具體畫面可參考下圖

這段指令分為四個區塊,紅色區塊是代表呼叫docker內建的run指令,docker的指令可透過docker  --help的方式列舉出所有指令。第二個區塊是參數,-d代表要docker將這個Container在背景中執行;而-P則是告訴docker自動對應Image檔案和Host的Port,換句話說,假如Image檔案裡有用到80 port,將會自動與Host的80 port對應。

Image和Host之間的Port對應,大寫P是自動對應,也可用小寫的p 來指定如何對應,例如 -p 80:5000,就是將image的5000 port對應到Host 的80port。

指定port的範例  

docker run -d -p 80:80 training/webapp python app.py
如果執行指定port對應 時出現以上錯誤,代表你的Host port已經被占用,只需要換另外一個未被使用的port即可正常

第三個區塊是image的名稱,Docker Daemon會先搜尋本機是否有存在此名稱的image檔案,若不存在會自動去遠端下載。第四個區塊是要要在Container內執行的指令。

執行完畢後,輸入docker ps ,如出現以下畫面,代表Container已成功啟動。

檢視成果

輸入docker ps,檢視目前運行中的Container,並找到Container的名稱,接著輸入docker port "Container 名稱",如下圖所示,會出現port自動對應的數字,以下例子是32769。

打開瀏覽器,輸入localhost:port的數字,如出現以下畫面,代表Container已正常運作了。

結論

透過很簡單的幾行指令,就可以在尚未安裝任何其他設定的電腦跑python的程式,展現出docker強大的可攜性,真可謂是DevOps的神器。本篇先小試一下身手,下載別人的Image檔,注入Container內執行,下一篇將談到如何建立屬於自己的Image檔。