使用 Dockerfile 文件指定你的應(yīng)用環(huán)境,讓它能在任意地方復(fù)制使用:
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
在 fig.yml 文件中指定應(yīng)用使用的不同服務(wù),讓它們能夠在一個(gè)獨(dú)立的環(huán)境中一起運(yùn)行:
web:
build: .
command: python app.py
links:
- db
ports:
- "8000:8000"
db:
image: postgres
注意不需要再額外安裝 Postgres 了!
接著執(zhí)行命令 fig up ,然后 Fig 就會(huì)啟動(dòng)并運(yùn)行你的應(yīng)用了。
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/images/fig-example-large.gif" alt="Docker" />
Fig 可用的命令有:
我們?cè)囍屢粋€(gè)基本的 Python web 應(yīng)用運(yùn)行在 Fig 上。這個(gè)實(shí)驗(yàn)假設(shè)你已經(jīng)知道一些 Python 知識(shí),如果你不熟悉,但清楚概念上的東西也是沒(méi)有問(wèn)題的。
為你的項(xiàng)目創(chuàng)建一個(gè)目錄
$ mkdir figtest
$ cd figtest
進(jìn)入目錄,創(chuàng)建 app.py,這是一個(gè)能夠讓 Redis 上的一個(gè)值自增的簡(jiǎn)單 web 應(yīng)用,基于 Flask 框架。
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 文件中指定應(yīng)用的 Python 依賴包。
flask
redis
下一步我們要?jiǎng)?chuàng)建一個(gè)包含應(yīng)用所有依賴的 Docker 鏡像,這里將闡述怎么通過(guò) Dockerfile 文件來(lái)創(chuàng)建。
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
以上的內(nèi)容首先告訴 Docker 在容器里面安裝 Python ,代碼的路徑還有Python 依賴包。關(guān)于 Dockerfile 的更多信息可以查看鏡像創(chuàng)建和 Dockerfile 使用。
接著我們通過(guò) fig.yml 文件指定一系列的服務(wù):
web:
build: .
command: python app.py
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
這里指定了兩個(gè)服務(wù):
Dockerfile 創(chuàng)建。并且說(shuō)明了在容器里面執(zhí)行python app.py 命令 ,轉(zhuǎn)發(fā)在容器里開放的 5000 端口到本地主機(jī)的 5000 端口,連接 Redis 服務(wù),并且掛載當(dāng)前目錄到容器里面,這樣我們就可以不用重建鏡像也能直接使用代碼。現(xiàn)在如果執(zhí)行 fig up 命令 ,它就會(huì)拉取 redis 鏡像,啟動(dòng)所有的服務(wù)。
$ fig up
Pulling image redis...
Building web...
Starting figtest_redis_1...
Starting figtest_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/
這個(gè) web 應(yīng)用已經(jīng)開始在你的 docker 守護(hù)進(jìn)程里面監(jiān)聽著 5000 端口了(如果你有使用 boot2docker ,執(zhí)行 boot2docker ip ,就會(huì)看到它的地址)。
如果你想要在后臺(tái)運(yùn)行你的服務(wù),可以在執(zhí)行 fig up 命令的時(shí)候添加 -d 參數(shù),然后使用 fig ps 查看有什么進(jìn)程在運(yùn)行。
$ fig up -d
Starting figtest_redis_1...
Starting figtest_web_1...
$ fig ps
Name Command State Ports
-------------------------------------------------------------------
figtest_redis_1 /usr/local/bin/run Up
figtest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
fig run 指令可以幫你向服務(wù)發(fā)送命令。例如:查看 web 服務(wù)可以獲取到的環(huán)境變量:
$ fig run web env
執(zhí)行幫助命令 fig --help 查看其它可用的參數(shù)。
假設(shè)你使用了 fig up -d 啟動(dòng) Fig,可以通過(guò)以下命令停止你的服務(wù):
$ fig stop
以上內(nèi)容或多或少的講述了如何使用Fig 。通過(guò)查看下面的引用章節(jié)可以了解到關(guān)于命令、配置和環(huán)境變量的更多細(xì)節(jié)。如果你有任何想法或建議,可以在 GitHub 上提出。