第三口docker的感覺——docker compose

我們爲什麼需要docker compose呢?

現在大行其道的微服務架構,是由多個service組成的,在web應用中數據庫也是必不可少的,那麼這些組件就成了我一個項目的標配,那麼我們如果把這一組映射到docker世界裏去呢?docker-compose就可以作爲這一組的體現。總結起來docker compose可以給我們帶來的好處是:

  1. 避免了我們手動創建多個 dockerfile,多個image,多個容器。減少了我們的工作量。
  2. 啓動停止刪除可以被一次處理。

什麼是docker compose呢?

其實就是一個docker的批處理工具。通過yml文件定義多容器的docker應用。

通過一條命令可以通過yml定義創建啓動管理同屬於一個"group"的容器。

Docker-compose.yml:

  • Services
  • Networks
  • Volumes
Services:

一個Services就相當於一個container,這個container可以從docker hub獲取或者是dockerfile進行構建

我們在service中可以指定network和volume。

我們之前是這樣啓動docker 容器的如下:

docker run --network my-network -v postgre-data:/var/lib/postgresql/data postgres:9.4

這裏啓動了一個postgresql的數據庫,那如果在docker compose中我們應該如何做呢?

services:
    postgre-db:
        image: postgresql:9.4
        volume: 
            - "postgre-data:/var/lib/postgresql/data"
        network: 
            - my-network

我們很明顯的可以看出來他們之間一個對應的關係。

service它的直接孩子指定的是容器的名稱,然後他的孩子分別是image,volume,network這些。

⚠️ 這是從docker hub獲取下來的image,如果是通過自己的dockerfile該如何寫呢?

services:
    my-docker:
        build: ./my-docker
        networks:
            - my-network

那很多人會奇怪了,這個"postgre-data"和"my-network"是從哪裏來的呢?別急,我們看一下完整的docker compose的yaml:

services:
    postgre-db:
        image: postgresql:9.4
        volume:
            - "postgre-data:/var/lib/postgresql/data"
        network:
            - my-network

volumes:
    postgre-data

networks:
    my-network:
        driver: briage

這下子水落石出了,和services同級的地方,有定義volumes和networks。摺合前面舉例子的docker compose三要素正好對應上了。

更詳細的docker-compose yaml文件的屬性,可以參考https://docs.docker.com/compose/compose-file/

Docker compse 常用命令

Docker compose啓動的命令爲

docker-compose up

Docker compose 查看當前compose中運行的container

docker-compose ls

Docker compose 停掉所有運行的container

docker-compose stop

Docker compose 移除所有停止的container

docker-compse rm

Docker compose 停止並且移除servies,networks,volumes

docker-compose down

⚠️這個命令不會刪除本地的images。

其他更多詳細的內容命令,請查看https://docs.docker.com/compose/reference/

或者使用docker-compose - -help 查看。

Docker compose的拓展

我前面有提到過docker compose就是爲了微服務的理念而生的,微服務只是從業務邏輯上的一種拆分。那如果負載在高的情況下,我們怎麼才能抵抗住這種壓力呢?那就得使用load balance(負載均衡)了。負載均衡在docker中也是有所體現的。

我們可以使用如下命令進行擴展:

#SERVICE 指的是你在docker compose中定義的名字,NUM指定的是你想要的數量
docker-compose up --scale SERVICE=NUM

這樣就可以對自己的服務進行自由的伸縮。

⚠️前提是我們需要在我們的compose中安排一個loadbalance

可以參考:https://github.com/docker/dockercloud-haproxy

英語不好的可以參考https://www.jianshu.com/p/4a2281bfb1cc

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