在以前的文章中咱們介紹了Docker相關的基礎知識以及如何建立一個鏡像並以一個容器實例來運行這個鏡像;衆所周知,目前微服務的開發模式逐漸成爲主流的開發模式,在咱們的實際開發流程中,大概開發流程是這樣的,首先咱們針對特定業務需求完成一個微服務的開發工做,而後咱們利用docker將微服務打包成一個鏡像(image), 而後將鏡像發佈到咱們的私有鏡像倉庫中,最後咱們能夠在多個環境中以容器的形式來運行這個鏡像。若是針對一個微服務的部署這種方式看起來還算不錯,可是現實開發中咱們開發的絕對不是一個微服務,所以咱們將面對的多是多個微服務的部署工做,針對多個微服務的部署若是咱們還按照以上的方式來進行,那對於運維人員來講會有不少重複性的工做,針對這種狀況,Docker內置的Compose組件爲咱們解決了這個問題。在實際動手操做以前讓咱們先了解一下compose的定義。html
compose項目是Docker官方的開源項目,負責實現對Docker容器集羣的快速編排。Docker官方給Compose的定位是:Defining and running multi-container Docker applications,其前身是開源項目Fig。在以前的介紹中,咱們能夠經過Dockerfile模板文件來定義一個單獨的應用容器。可是在咱們實際的開發過程當中,咱們常常會碰到須要多容器相互配合來完成某項任務,針對這種狀況compose應運而生。它容許用戶經過一個單獨的docker-compose.yml模板文件(YAML格式)來定義一組相關聯的應用容器爲一個項目(project)。前端
在Compose中有一個很是重要的概念:服務。git
在分佈式應用中,應用的不一樣部分稱爲"服務"。例如,假設有一個視頻共享網站,它可能提供用於在數據庫中存儲應用程序數據的服務,用於在用戶上傳一些內容後在後臺進行視頻轉碼的服務,用於前端的服務等。在Compose中一項服務僅運行一個鏡像,但它會編制鏡像的運行方式:例如使用的端口,容器的多少個從節點應運行才能使服務的容量知足其需求等。擴展服務就是更改運行該軟件的容器實例數,並將多個計算資源分配給進程中的服務。全部以上這些設置咱們均可以經過定義一個docker-compose.yml(該文件與Dockerfile文件不一樣,Dockerfile文件必須命名爲Dockerfile,而該文件的文件名能夠自行定義,官方給的命名爲docker-compose,咱們就用官方的命名規則來命名)文件來實現。web
Docker Desktop for Windows 和 Docker Toolbox已經包含了對Compose組件的安裝,所以咱們沒必要再單獨進行安裝,咱們能夠經過使用docker-compose --version指令來查看當前機器上的compose版本,如圖所示:docker
該部分會用到以前文章中已經push到docker hub鏡像倉庫中的鏡像文件。讓咱們來建立第一個docker-compose.yml文件,文件內容以下圖所示:數據庫
該文件中主要定義瞭如下幾項:json
version定義了咱們當前compose文件格式的版本。瀏覽器
Services是服務的根節點,下方定義的就是咱們要包含在這個compose中的全部的服務,本次示例咱們只包含一個服務,web表示的是咱們定義的服務的名稱,你們能夠根據本身service的含義來命名。網絡
image表示的是當前service的鏡像倉庫地址app
ports表示的是將容器的80端口與主機的5000端口mapping
networks表示的是配置容器鏈接的網絡
HOST:CONTAINER
格式來映射端口時,若是你使用的容器端口小於 60 而且沒放到引號裏,可能會獲得錯誤結果,由於 YAML
會自動解析 xx:yy
這種數字格式爲 60 進制。爲避免出現這種問題,建議數字串都採用引號包括起來的字符串格式。
咱們進入到該文件所在的目錄,並在cmd中經過docker指令docker-compose up來執行該文件,如圖所示:
咱們經過瀏覽器訪問http://localhost:5000,如圖所示:
這樣咱們就經過compose發佈並運行了咱們的一個service(一個鏡像的容器實例)
你們可能已經意識到目前咱們在compose文件中定義的內容和單獨執行docker run指令實際上是沒有太大區別的,確實在compose中定義的單個服務的相關指令關鍵字和docker run指令中包含的關鍵字在含以上都是相似的,可是經過執行docker run指令一次只能建立出來一個image的一個容器實例,經過compose咱們能夠建立出來一組容器實例,咱們管每個容器實例叫作一個service,而compose正是對這一個個service進行了編排,包括service之間的依賴關係,啓動順序,所須要消耗的資源等等。在本篇咱們只是單獨的介紹了compose的基本用法和基本指令,你們能夠經過地址對更多的compose關鍵字進行學習。
但願本篇文章可以更好的幫助你們理解docker compose的概念。若是有任何問題均可以給我留言。
注意: 因爲google對定義的yml文件格式要求的十分嚴格,所以你們在編寫本身的yml文件時必定要格外當心注意,這裏給你們提供一個在線的yml文件格式校驗器,你們能夠對本身的yml文件進行校驗。
相關資料:
yeasy.gitbooks.io/docker_prac…