Docker Compose是一個用來定義和運行復雜應用的Docker工具。一個使用Docker容器的應用,一般由多個容器組成。使用Docker Compose再也不須要使用shell腳原本啓動容器,而使用服務編排的方式來管理容器。
Docker Compose 經過一個配置文件來管理多個Docker容器,在配置文件中,全部的容器經過services來定義,而後使用docker-compose腳原本啓動,中止和重啓應用,和應用中的服務以及全部依賴服務的容器,很是適合組合使用多個容器進行開發的場景。python
Docker Compose的核心是經過一個YAML文件來管理多個Docker容器,在配置文件中,全部的容器經過services來定義。git
YAML (YML)的意思實際上是:"Yet Another Markup Language"(還是一種置標語言)的縮寫。YAML的語法和其餘高階語言相似,而且能夠簡單表達清單、散列表,標量等資料形態。它使用空格縮排和大量依賴外觀的特點,特別適合用來表達或編輯數據結構、各類設定檔、傾印除錯內容、文件大綱(例如:許多電子郵件標題格式和YAML很是接近)。能夠是用 .yml 或 .yaml 做爲文件擴展名。github
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" \ -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version
這裏,咱們將使用兩種不一樣的方式:手動部署和利用Docker Compose部署,來講明使用Docker Compose進行部署所帶來的好處。web
##app.py應用程序代碼 from flask import Flask from redis import Redis import os app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') return 'Hello World! I have been seen %s times.' % redis.get('hits') if __name__ == "__main__": app.run(host="0.0.0.0", debug=True) ----------------------------------------- ##requirements.txt文件內容 flask redis ----------------------------------------- ##Dockerfile文件內容 FROM python:3.4-alpine ADD . /code WORKDIR /code COPY app.py /code RUN pip install -r requirements.txt CMD ["python", "app.py"]
##因爲應用程序中,須要redis的支持,首先啓動一個Redis容器 docker run --name myredis -d -p 6379:6379 redis ##使用docker build編譯Dockerfile docker build -t myapplication . ##使用docker run命令啓動應用程序,並使用--link參數鏈接到上面的redis容器中 docker run --name myapp_using_redis -p 5000:5000 --link myredis:redis -d myapplication 其中:--link參數中的: myredis:是上面的啓動的Redis容器 redis:是這個Redis的容器的別名(能夠當作是HostName) ##經過網址http://192.168.15.133:5000訪問應用程序 ##刷新頁面,計數器會自增。
而事實上,咱們可使用更加簡化的方式來定義咱們的容器組合管理,使用Docker-compose來定義咱們的容器組合關係。目錄結構下,包含如下文件:redis
其中,docker-compose.yml文件內容以下:docker
version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis"
執行docker-compose up來啓動應用,訪問應用程序:http://192.168.15.133:5000/shell
從這裏例子中咱們能夠看到,經過Docker Compose的YAML配置文件,咱們把兩個相關的Service(web和redis)進行了服務編排,從而簡化的應用的部署。flask