Docker Compose 是 Docker 官方編排(Orchestration)項目之一,負責(zé)快速在集群中部署分布式應(yīng)用
Compose 簡介
Compose 項目是 Docker 官方的開源項目,負責(zé)實現(xiàn)對 Docker 容器集群的快速編排。Compose 定位是 「定義和運行多個 Docker 容器的應(yīng)用(Defining and running multicontainer Docker applications)」,其前身是開源項目 Fig。
使用一個 Dockerfile 模板文件,可以讓用戶很方便的定義一個單獨的應(yīng)用容器。然而,在日常工作中,經(jīng)常會碰到需要多個容器相互配合來完成某項任務(wù)的情況。例如要實現(xiàn)一個 Web 項目,除了 Web 服務(wù)容器本身,往往還需要再加上后端的數(shù)據(jù)庫服務(wù)容器,甚至還包括負載均衡容器等。
Compose 恰好滿足了這樣的需求。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關(guān)聯(lián)的應(yīng)用容器為一個項目(project)。
Compose 中有兩個重要的概念:
服務(wù) ( service ):一個應(yīng)用的容器,實際上可以包括若干運行相同鏡像的容器實例
項目 ( project ):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個完整業(yè)務(wù)單元,在 dockercompose.yml 文件中定義。
Compose 的默認管理對象是項目,通過子命令對項目中的一組容器進行便捷地生命周期管理??梢?,一個項目可以由多個服務(wù)(容器)關(guān)聯(lián)而成, Compose 面向項目進行管理
Compose 項目由 Python 編寫,實現(xiàn)上調(diào)用了 Docker 服務(wù)提供的 API 來對容器進行管理。因此,只要所操作的平臺支持 Docker API,就可以在其上利用 Compose 來進行編排管理。
安裝與卸載
Compose 可以通過 Python 的包管理工具 pip 進行安裝,也可以直接下載編譯好的二進制文件使用,甚至能夠直接在 Docker 容器中運行。前兩種方式是傳統(tǒng)方式,適合本地環(huán)境下安裝使用;最后一種方式則不破壞系統(tǒng)環(huán)境,更適合云計算場景。Docker for Mac 、 Docker for Windows 自帶 docker-compose 二進制文件,安裝 Docker 之后可以直接使用。Linux 系統(tǒng)請使用以下介紹的方法安裝。
二進制包安裝
在 Linux 上的也安裝十分簡單,從 官方 GitHub Release 處直接下載編譯好的二進制文件即可。
例如,在 Linux 64 位系統(tǒng)上直接下載對應(yīng)的二進制包。
sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` >/usr/local/bin/docker-composesudo chmod +x/usr/local/bin/docker-compose
對于卸載如果是二進制包方式安裝的,刪除二進制文件即可。
sudo rm/usr/local/bin/docker-compose
PIP 安裝
這種方式是將 Compose 當(dāng)作一個 Python 應(yīng)用來從 pip 源中安裝。執(zhí)行安裝命令:
sudo pipinstall-U docker-compose
使用PIP安裝的時候,卸載可以使用如下命令:
sudopip uninstall docker-compose
簡單入門
下面我們模擬一個網(wǎng)站,該網(wǎng)站的作用是能夠記錄頁面的訪問次數(shù)。我們使用Flask開發(fā),緩存使用redis
編寫wen應(yīng)用
新建一個文件夾web,在該文件夾下創(chuàng)建app.py文件,內(nèi)容如下:
fromflaskimportFlaskfromredisimportRedisapp = Flask(__name__)redis = Redis(host="redis",port=6379)@app.route("/")defhello():count = redis.incr('hits')return'hello world! {}'.format(count)if__name__ =="__main__":? ? app.run(host="0.0.0.0",debug=True)
編寫Dockerfile文件
FROMpython:3.6-alpineADD . /codeWORKDIR /codeRUN pip install redis flaskCMD["python","app.py"]
docker-compose.yml
編寫 docker-compose.yml 文件,這個是 Compose 使用的主模板文件。
version:'3'services:web:build: .ports:? ? ? ? ? ? -"5000:5000"redis:images:"redis:alpine"
運行 compose 項目
docker-compose up
此時訪問本地 5000 端口,每次刷新頁面,計數(shù)就會加 1。
每天進步一點點