1. Docker服務
作為一名後端攻城獅,對“服務”這個概念一定不陌生。比如,我們做一個會員系統,它可能會需要資料庫、快取、訊息佇列,這些都是中介軟體服務,除此以外可能還需要依賴其它的Dubbo服務。
在Docker中,服務就是用於生產環境的容器(“containers in production”)。我們可以這樣來理解這句話,當我們執行某個映象時,其實就產生了一個映象例項,這個例項我們把它叫做容器,接下來我們對它做個升級,比如一些配置負載均衡,配置域名解析對映等,最終它以web服務的形式執行,那麼這個升級版的容器就是Docker服務。可以設想一下開發一個Java應用程式是怎樣的過程,首先建一個工程,然後編寫程式碼,打成jar包,在內網執行,配置nginx,配置告警及監控,經過這一系列操作後,客戶端才能通過公網訪問到這個服務。(PS:類比Java的話,映象就是類,容器就是物件,服務就是一個成型的APP產品,或者叫服務)
一個服務只執行一個映像,但是它將映象執行的方式進行了編碼,比如應該使用什麼埠,應該執行多少個容器副本,以便服務具有所需的能力,等等。可以通過改變執行該軟體的容器例項的數量來對服務進行擴容,從而為流程中的服務分配更多的計算資源。
幸運的是,使用Docker平臺很容易定義、執行和擴容服務。只需要寫一個docker-compose.yml檔案即可。
一個docker-compose.yml檔案是一個YAML檔案,它定義了Docker容器在生產環境中的行為。
這個docker-compose.yml檔案告訴Docker要做以下事情:
從註冊中心上pull(拉取)映象以web服務的形式執行該映像的5個例項,限制每個例項最多隻能使用CPU單個核心時間的10%(也可以是“1.5”,表示每個例項只能使用1.5個核心)和50MB記憶體如果一個容器失敗,立即重啟它將主機上的4000埠對映到web的80埠指示web容器通過叫webnet的負載均衡網路共享80埠用預設設定定義webnet網路
3. 執行新的負載均衡的APP首先,執行
我們的單個服務堆疊在一臺主機上運行了5個容器例項,讓我們來看一看
除了“docker service ls”,我們還可以通過“docker stack services”來檢視
還可以通過修改docker-compose.yml來動態的擴充套件app,修改為後需要再執行一次
完整的演示
備忘單