簡單使用
在這一頁中你會構建一個簡單的Python的web應用并基于Docker Compose運行。這個應用使用了Flask框架使一個Redis里的值增長。盡管這里使用的例子是Python實現(xiàn)的,你可能并不使用Python矾湃,這里主要是為了演示并不用理解它恼蓬。
準備
確保你已經(jīng)安裝了Docker Engine和Doker Compose惊完。你不需要安裝Python,我們通過Docker的image來提供它处硬。
第一步
- 創(chuàng)建一個工程目錄:
$ mkdir composetest
$ cd composetest
- 用你最喜歡的文本編輯器創(chuàng)建一個叫
app.py
的文件在你的工程目錄里小槐。
from flask import Flask
from redis import Redis
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)
- 創(chuàng)建另一個
requirements.txt
在你的工程目錄里,加入下面的內(nèi)容:
flask
redis
這里定義了這個應用的依賴荷辕。
第二步:創(chuàng)建一個Docker image
在這一步里凿跳,你將構建一個新的Docker image。這個image包含了這個Python應用需要的所有的依賴疮方,包括Python自己控嗜。
- 在你的工程目錄里創(chuàng)建一個
Dockerfile
文件,添加如下內(nèi)容:
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py
這些命令告訴Docker:
- 基于Python2.7鏡像構建一個鏡像骡显。
- 添加當前目錄
.
到鏡像的/code
路徑 - 設置工作目錄為
/code
- 安裝Python依賴
- 設置
python app.py
為容器的默認命令疆栏。
關于如何寫Dockerfile的更多信息,可以看 Docker用戶指南和Dockerfile 參考惫谤。
- 構建鏡像壁顶。
$ docker build -t web .
這個命令構建了一個名為web
的鏡像根據(jù)當前目錄的內(nèi)容。這個命令會自動發(fā)現(xiàn)Dockerfile
溜歪,app.py
和requirements.txt
文件若专。
第三部:定義服務
使用docker-compose.yml
來定義一組服務。
- 創(chuàng)建
docker-compose.yml
文件在你的工程目錄中痹愚,然后添加下面的內(nèi)容:
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
這個Compose文件定義了兩個服務富岳,web
和redis
。這個web
服務:
- 基于當前目錄的
Dockerfile
構建拯腮。 - 將主機的5000端口暴露出來并轉(zhuǎn)發(fā)到container的5000端口。
- 掛在主機的工程目錄到容器的
/code
蚁飒,這樣你就可以不用重構鏡像就可以修改代碼了动壤。 - 鏈接這個web服務和Redis服務。
這個redis
服務使用的image是從Docker Hub上pull下的最新版淮逻。
第四部:通過Compose構建并運行你的app
- 在你的工程目錄中啟動你的app琼懊。
$ docker-compose up
Pulling image redis...
Building web...
Starting composetest_redis_1...
Starting composetest_web_1...
redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3
web_1 | * Running on http://0.0.0.0:5000/
web_1 | * Restarting with stat
Compose pull下一個Redis image,根據(jù)你的代碼構建爬早,然后啟動你定義的服務哼丈。
- 通過
http://0.0.0.0:5000/
在瀏覽器中可以看到這個運行的app。
如果你使用的是Linux的原生Docker筛严,這個web app現(xiàn)在應該監(jiān)聽了你的Docker daemon主機的5000端口醉旦。如果http://0.0.0.0:5000
不能夠被解析,你也可以試試http://localhost:5000
。
如果你使用的是Mac的Docker Machine车胡,使用docker-machine ip MACHINE_VM
去獲取Docker主機的IP地址檬输。然后在瀏覽器中打開http://MACHINE_VM_IP:5000
。
你應該可以在你的瀏覽器里看到這樣的消息:
Hello World! I have been seen 1 times.
- 刷新網(wǎng)頁匈棘。
這個time次數(shù)應該會增長丧慈。
第五部:嘗試下其它的命令
如果你想運行服務在后臺,你可以通過docker-compose up
的-d
標識主卫。然后使用docker-compose ps
去查看當前的運行信息:
$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------
composetest_redis_1 /usr/local/bin/run Up
composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
命令docker-compose run
允許你為你的服務運行一次性的命令逃默。比如,如果想要看看web服務的環(huán)境變量:
$ docker-compose run web env
通過docker-compose --help
可以看看其它可用的命令簇搅。
如果你使用docker-compose up -d
啟動的Compose笑旺,想要停止服務,你可以一次性停止它們:
$ docker-compose stop
至此馍资,你已經(jīng)看到了關于Compose的基本使用筒主。