Docker Compose
是 Docker 官方編排(Orchestration)項目之一,負責快速的部署分佈式應用。python
其代碼目前在 https://github.com/docker/compose 上開源。git
在平常工做中,常常會碰到須要多個容器相互配合來完成某項任務的狀況。例如要實現一個 Web 項目,除了 Web 服務容器自己,每每還須要再加上後端的數據庫服務容器,甚至還包括負載均衡容器等。github
Compose
剛好知足了這樣的需求。它容許用戶經過一個單獨的 docker-compose.yml
模板文件(YAML 格式)來定義一組相關聯的應用容器爲一個項目(project)。web
Compose
中有兩個重要的概念:redis
服務 (service
):一個應用的容器,實際上能夠包括若干運行相同鏡像的容器實例。docker
項目 (project
):由一組關聯的應用容器組成的一個完整業務單元,在 docker-compose.yml
文件中定義。數據庫
Compose
支持 Linux、macOS、Windows 10 三大平臺。flask
Compose
能夠經過 Python 的包管理工具 pip
進行安裝,也能夠直接下載編譯好的二進制文件使用,甚至可以直接在 Docker 容器中運行。後端
前兩種方式是傳統方式,適合本地環境下安裝使用;最後一種方式則不破壞系統環境,更適合雲計算場景。緩存
Docker for Mac
、Docker for Windows
自帶 docker-compose
二進制文件,安裝 Docker 以後能夠直接使用。
$ docker-compose --version docker-compose version 1.17.1, build 6d101fb
Linux系統安裝
1.二進制包
從 官方 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
2.pip安裝
注: x86_64
架構的 Linux 建議按照上邊的方法下載二進制包進行安裝,若是您計算機的架構是 ARM
(例如,樹莓派),再使用 pip
安裝。
這種方式是將 Compose 看成一個 Python 應用來從 pip 源中安裝。
執行安裝命令:
$ sudo pip install -U docker-compose
3.bash 補全命令
$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
4.容器中執行
Compose 既然是一個 Python 應用,天然也能夠直接用容器來執行它。
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
若是是二進制包方式安裝的,刪除二進制文件便可。
$ sudo rm /usr/local/bin/docker-compose
若是是經過 pip
安裝的,則執行以下命令便可刪除。
$ sudo pip uninstall docker-compose
最多見的項目是 web 網站,該項目應該包含 web 應用和緩存。
下面用 Python
來創建一個可以記錄頁面訪問次數的 web 網站。
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! 該頁面已被訪問 {} 次。\n'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
Dockerfile
編寫 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: image: "redis:alpine"
運行compose項目
$ docker-compose up
此時訪問本地 5000
端口,每次刷新頁面,計數就會加 1。