簡單使用 docker compose

簡單使用

在這一頁中你會構建一個簡單的Python的web應用并基于Docker Compose運行。這個應用使用了Flask框架使一個Redis里的值增長。盡管這里使用的例子是Python實現(xiàn)的,你可能并不使用Python矾湃,這里主要是為了演示并不用理解它恼蓬。

準備

確保你已經(jīng)安裝了Docker Engine和Doker Compose惊完。你不需要安裝Python,我們通過Docker的image來提供它处硬。

第一步

  1. 創(chuàng)建一個工程目錄:
$ mkdir composetest
$ cd composetest
  1. 用你最喜歡的文本編輯器創(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)
  1. 創(chuàng)建另一個requirements.txt在你的工程目錄里,加入下面的內(nèi)容:
flask
redis

這里定義了這個應用的依賴荷辕。

第二步:創(chuàng)建一個Docker image

在這一步里凿跳,你將構建一個新的Docker image。這個image包含了這個Python應用需要的所有的依賴疮方,包括Python自己控嗜。

  1. 在你的工程目錄里創(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 參考惫谤。

  1. 構建鏡像壁顶。
$ docker build -t web .

這個命令構建了一個名為web的鏡像根據(jù)當前目錄的內(nèi)容。這個命令會自動發(fā)現(xiàn)Dockerfile溜歪,app.pyrequirements.txt文件若专。

第三部:定義服務

使用docker-compose.yml來定義一組服務。

  1. 創(chuàng)建docker-compose.yml文件在你的工程目錄中痹愚,然后添加下面的內(nèi)容:
version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis

這個Compose文件定義了兩個服務富岳,webredis。這個web服務:

  • 基于當前目錄的Dockerfile構建拯腮。
  • 將主機的5000端口暴露出來并轉(zhuǎn)發(fā)到container的5000端口。
  • 掛在主機的工程目錄到容器的/code蚁飒,這樣你就可以不用重構鏡像就可以修改代碼了动壤。
  • 鏈接這個web服務和Redis服務。

這個redis服務使用的image是從Docker Hub上pull下的最新版淮逻。

第四部:通過Compose構建并運行你的app

  1. 在你的工程目錄中啟動你的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ù)你的代碼構建爬早,然后啟動你定義的服務哼丈。

  1. 通過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.
  1. 刷新網(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的基本使用筒主。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸟蟹,隨后出現(xiàn)的幾起案子乌妙,更是在濱河造成了極大的恐慌,老刑警劉巖建钥,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藤韵,死亡現(xiàn)場離奇詭異,居然都是意外死亡熊经,警方通過查閱死者的電腦和手機泽艘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镐依,“玉大人匹涮,你說我怎么就攤上這事』笨牵” “怎么了然低?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長务唐。 經(jīng)常有香客問我雳攘,道長,這世上最難降的妖魔是什么枫笛? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任吨灭,我火速辦了婚禮,結果婚禮上刑巧,老公的妹妹穿的比我還像新娘喧兄。我一直安慰自己无畔,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布繁莹。 她就那樣靜靜地躺著檩互,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咨演。 梳的紋絲不亂的頭發(fā)上闸昨,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音薄风,去河邊找鬼饵较。 笑死,一個胖子當著我的面吹牛遭赂,可吹牛的內(nèi)容都是我干的循诉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼撇他,長吁一口氣:“原來是場噩夢啊……” “哼茄猫!你這毒婦竟也來了?” 一聲冷哼從身側響起困肩,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤划纽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锌畸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勇劣,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年潭枣,在試婚紗的時候發(fā)現(xiàn)自己被綠了比默。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡盆犁,死狀恐怖命咐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚣抗,我是刑警寧澤侈百,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站翰铡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讽坏。R本人自食惡果不足惜锭魔,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望路呜。 院中可真熱鬧迷捧,春花似錦织咧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庆锦,卻和暖如春捅位,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搂抒。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工艇搀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人求晶。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓焰雕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芳杏。 傳聞我的和親對象是個殘疾皇子矩屁,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容