Docker三劍客之compose

簡介

Compose 項目是 Docker 官方的開源項目,負責實現對 Docker 容器集羣的快速編排。從功能上看,跟 OpenStack 中的 Heat 十分相似。其代碼目前在 https://github.com/docker/compose 上開源。
Compose 定位是"定義和運行多個 Docker 容器的應用(Defining and running multi-container Docker applications)",其前身是開源項目 Fig。
Compose 容許用戶經過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器爲一個項目(project)。
Compose 中有兩個重要的概念:html

  • 服務 (service):一個應用的容器,實際上能夠包括若干運行相同鏡像的容器實例。
  • 項目 (project):由一組關聯的應用容器組成的一個完整業務單元,在 docker-compose.yml 文件中定義。

可見,一個項目能夠由多個服務(容器)關聯而成,Compose 面向項目進行管理python

Compose 的默認管理對象是項目,經過子命令對項目中的一組容器進行便捷地生命週期管理。
Compose 項目由 Python 編寫,實現上調用了 Docker 服務提供的 API 來對容器進行管理。所以,只要所操做的平臺支持 Docker API,就能夠在其上利用 Compose 來進行編排管理。git

Compose標準模板文件應該包含version、services、networks 三大部分;version用來定義所使用的語言版本,compose有三大版本,其中初版已經處於被廢棄狀態了,主要使用由version 2 與version 3github

其實我並不推薦使用compose,由於compose是根據python定製的一套docker接口語言,並且每一個版本之間功能混亂,就連小版本之間的功能也會出現矛盾,好比:2.2版本中的build 與 2.4版本中的build使用方式就不同,有些功能只能在swarm模式下面使用,因此我極度不喜歡這個功能,可是也是三劍客之一,不得不學習,若是咱們在平時工做中對docker-compose使用不是很順手也能夠根據本身拿手的語言經過docker API本身定製;下面是關於docker-compose的一些經常使用命令及操做web

 

安裝與卸載

Compose 支持 Linux、macOS、Windows 10 三大平臺。
Compose 能夠經過 Python 的包管理工具 pip 進行安裝,也能夠直接下載編譯好的二進制文件使用,甚至可以直接在 Docker 容器中運行。
前兩種方式是傳統方式,適合本地環境下安裝使用;最後一種方式則不破壞系統環境,更適合雲計算場景。
Docker for Mac 、Docker for Windows 自帶 docker-compose 二進制文件,安裝 Docker 以後能夠直接使用。redis

 

Linux下安裝Compose

二進制安裝
curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

 

PIP安裝
注: x86_64 架構的 Linux 建議按照上邊的方法下載二進制包進行安裝,若是您計算機的架構是 ARM (例如,樹莓派),再使用 pip 安裝。

pip install -U docker-compose

能夠看到相似以下輸出,說明安裝成功
Collecting docker-compose
  Downloading docker-compose-1.17.1.tar.gz (149kB): 149kB downloaded
...
Successfully installed docker-compose cached-property requests texttable websocket-client docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress

 

二進制卸載

若是是二進制包方式安裝的,刪除二進制文件便可。docker

rm /usr/local/bin/docker-compose

 

PIP卸載
pip uninstall docker-compose

 

web案例

新建文件夾,在該目錄中編寫 app.py 文件flask

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 文件,內容爲websocket

FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

 

編寫 docker-compose.yml 文件架構

version: '3'
services:

  web:
    build: .
    ports:
     - "5000:5000"

  redis:
    image: "redis:alpine"

 

運行 compose 項目

docker-compose up

此時訪問本地 5000 端口,每次刷新頁面,計數就會加 1。

  

官網參考地址:https://docs.docker.com/compose/compose-file/

命令參考地址:https://blog.51cto.com/9291927/2310444

文件參考地址https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html

相關文章
相關標籤/搜索