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