Compose 的使用方式很是簡單,基本上就是下面的三板斧:html
其實 compose 提供的命令能夠管理應用的整個生命週期:python
本文咱們經過一個簡單的 demo 來介紹 Docker Compose 的基本用法。說明:本文的演示環境爲 ubuntu 16.04。本文的演示代碼能夠從 github 上下載。git
安裝 Docker Compose 前請先在本地安裝 Docker。
Docker Compose 的安裝十分簡單,在 ubuntu 中直接把可執行文件下載到本地就能夠了。github
$ sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
其中 1.22.0 是最新的版本。固然 Docker Compose 是個開源項目,你能夠選擇安裝不一樣的版本,或者是自行編譯。下圖爲筆者安裝以後顯示的版本信息:web
注意,默認的安裝並不包括命令補全功能,也就是說像 docker-compose restart 這樣的命令,你輸入 docker-compose re 後按 tab 鍵是沒法自動補全的。想要這個功能還須要額外的安裝,以 Bash 爲例,執行下面的命令:redis
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.22.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
而後從新登陸 Bash,就能夠經過 tab 鍵自動補全命令了!docker
下面的示例來自 docker 官網,就是一個簡單的 Flask 網頁應用,後端使用 redis 存儲數據,其 web server 的代碼以下(能夠從這裏下載到本文中的代碼):flask
import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
代碼很是簡單,就是對請求計數並顯示給用戶。爲了增長健壯性,在訪問 redis 時作了一點處理:嘗試訪問 5 次再報錯。把上面的代碼保存到文件 app.py 中。
要運行上面的代碼,須要在環境中安裝 flask 和 redis 包。建立 requirements.txt 文件,編輯其內容爲:ubuntu
flask redis
建立一個保存項目文件的目錄,好比 composecounter,把 app.py 和 requirements.txt 文件都放進去。後端
接下來咱們須要把上面的應用打包到容器鏡像中。在 composecounter 目錄下建立 Dockerfile 文件:
FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"]
上面代碼的含義爲:
給你們推薦一個架構羣:698581634 進羣便可免費獲取資料。
終於來到本文的重點了!咱們須要建立 Docker Compose 的配置文件來定義咱們的應用。
YAML 是一個可讀性高,用來表達數據序列的格式。Docker Compose 使用 YAML 格式的文件做爲配置文件。
在 composecounter 目錄中建立 docker-compose.yml 文件,其內容以下:
version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
第一行的 version: '3' 表示當前的配置文件使用的語法版本。
services 中的內容指明該應用一共定義了多少個服務(容器鏡像)。在運行時,一個服務是指從該鏡像啓動的一個或多個容器。
在咱們的示例中一共須要兩個容器鏡像。web 服務由咱們本身經過 build . 命令構建,映射的端口是 flask web server 默認的 5000 端口。
redis 服務則直接使用官方的鏡像。
在 composecounter 目錄下執行命令:
$ docker-compose up
跳過那些繁瑣的輸出,咱們直接訪問本機的 5000 端口:
一個 web 應用程序運行起來了,而且輸出了咱們訪問服務器端的次數,看起來還不錯!
若是要讓容器安靜的運行在後臺,加上 -d 選項就能夠了:
$ docker-compose up -d
分析 docker-compose up 命令的輸出能夠看清事情的真相,可是日誌過於繁瑣,咱們只說重點:
若是你手動去執行這些操做仍是挺很繁瑣的,如今一個命令就搞定了,還能夠把相關的代碼和配置通通的用版本管理工具管理起來。
雖然示例程序可以運行起來了,但咱們只是來到了一個新的起點。Docker Compose 被設計來管理應用的整個生命週期,咱們也能夠用它來極大的提升工做效率。筆者將在接下來的文章中介紹更多 Docker Compose 相關的內容。
原文連接:https://www.cnblogs.com/sparkdev/p/9753793.html