docker compose

1、概念

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 文件中定義。數據庫

2、安裝與卸載

安裝

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

3、使用

最多見的項目是 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。

相關文章
相關標籤/搜索