docker-compose使用示例

Step 1: 定義python應(yīng)用

1 .創(chuàng)建工程目錄

$ mkdir compose_test
$ cd compose_test
$ mkdir src      # 源碼文件夾
$ mkdir docker  # docker配置文件夾

2 .在compose_test/src/目錄下創(chuàng)建python flask應(yīng)用 compose_test/src/app.py文件。

from flask import Flask
from redis import Redis
 
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
 
@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello World! I have been seen {} times.\n'.format(count)
 
if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

3 .創(chuàng)建python 需求文件 compose_test/docker/requirements.txt

flask
redis

Step 2: 創(chuàng)建容器的Dockerfile文件

一個容器一個Dockerfile文件
為了工程目錄更加清晰苔巨,在compose_test/docker/目錄下創(chuàng)建compose_test/docker/web目錄

$ cd docker
$ mkdir web

在compose_test/docker/web/目錄中創(chuàng)建Dockerfile文件:

FROM python:3.4
ADD . /docker      
ADD ../../src /src  # ADD的源路徑應(yīng)該在Dockerfile文件的上下文環(huán)境中(即Dockerfile文件所在根目錄及其子目錄下词爬,如ADD . /src是合法的鹃共,而ADD ../../src /src不合法)窘茁,此處為了清晰的項(xiàng)目結(jié)構(gòu)瞪醋,只是展示ADD指令成黄,實(shí)際中應(yīng)該用volumes掛載
WORKDIR /src
RUN pip install -r /docker/requirements.txt
CMD ["python", "app.py"]

Dockerfile文件告訴docker了如下信息:

從Python 3.4鏡像開始構(gòu)建一個容器鏡像玻墅。 
復(fù)制當(dāng)前 . (即compose_test/docker)目錄到容器的/docker目錄介牙。
復(fù)制../../src目錄(即compose_test/src) 到容器中的/src目錄(此處../../src是不合法的路徑,ADD的源路徑必須在Dockerfile文件的上下文環(huán)境中澳厢,即Dockerfile文件所在根目錄或起子目錄中环础,實(shí)際應(yīng)該使用volumes掛載項(xiàng)目源文件)。 
將容器的工作目錄設(shè)置為/src剩拢。 
安裝Python依賴關(guān)系线得。
將容器的默認(rèn)命令設(shè)置為python app.py。

Step 3: 定義docker-compose腳本

在compose_test/docker/目錄下創(chuàng)建docker-compose.yml文件徐伐,并在里面定義服務(wù)贯钩,內(nèi)容如下:

version: '3'
services:
  web:
    build: ./web/
    ports:
     - "5000:5000"
  redis:
    image: "redis:3.0.7"

這個compose文件定義了兩個服務(wù),即定義了web和redis兩個容器办素。

web容器: 
* 使用當(dāng)前的web目錄(compose_test/docker/web/)中的Dockerfile構(gòu)建映像角雷。 
* 將容器上的暴露端口5000映射到主機(jī)上的端口5000。 我們使用Flask Web服務(wù)器的默認(rèn)端口5000性穿。 
redis容器: 
* redis服務(wù)使用從Docker Hub提取的官方redis鏡像3.0.7版本勺三。

Step 4: 使用Compose構(gòu)建并運(yùn)行您的應(yīng)用程序

在compose_test/docker/目錄下執(zhí)行docker-compose.yml文件:

$ docker-compose up
# 若是要后臺運(yùn)行: $ docker-compose up -d
# 若不使用默認(rèn)的docker-compose.yml 文件名:
$ docker-compose -f server.yml up -d 

然后在瀏覽器中輸入http://0.0.0.0:5000/查看運(yùn)行的應(yīng)用程序。


Step 5: 編輯compose文件以添加文件綁定掛載

上面的代碼是在構(gòu)建時靜態(tài)復(fù)制到容器中的需曾,即通過Dockerfile文件中的ADD ./src /src命令實(shí)現(xiàn)物理主機(jī)中的源碼復(fù)制到容器中吗坚,這樣在后續(xù)物理主機(jī)src目錄中代碼的更改不會反應(yīng)到容器中。
可以通過volumes 關(guān)鍵字實(shí)現(xiàn)物理主機(jī)目錄掛載到容器中的功能(同時刪除Dockerfile中的ADD指令呆万,不需要創(chuàng)建鏡像時將代碼打包進(jìn)鏡像商源,而是通過volums動態(tài)掛載,容器和物理host共享數(shù)據(jù)卷):

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - ../src :/src
  redis:
    image: "redis:3.0.7"

通過volumes(卷)將主機(jī)上的項(xiàng)目目錄(compose_test/src)掛載到容器中的/src目錄下谋减,允許您即時修改代碼牡彻,而無需重新構(gòu)建映像。


Step 6: 重新構(gòu)建和運(yùn)行應(yīng)用程序

使用更新的compose文件構(gòu)建應(yīng)用程序逃顶,然后運(yùn)行它讨便。

$ docker-compose up -d
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市以政,隨后出現(xiàn)的幾起案子霸褒,更是在濱河造成了極大的恐慌,老刑警劉巖盈蛮,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件废菱,死亡現(xiàn)場離奇詭異,居然都是意外死亡抖誉,警方通過查閱死者的電腦和手機(jī)殊轴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袒炉,“玉大人旁理,你說我怎么就攤上這事∥掖牛” “怎么了孽文?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夺艰。 經(jīng)常有香客問我芋哭,道長,這世上最難降的妖魔是什么郁副? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任减牺,我火速辦了婚禮,結(jié)果婚禮上存谎,老公的妹妹穿的比我還像新娘拔疚。我一直安慰自己,他們只是感情好既荚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布草雕。 她就那樣靜靜地躺著,像睡著了一般固以。 火紅的嫁衣襯著肌膚如雪墩虹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天憨琳,我揣著相機(jī)與錄音诫钓,去河邊找鬼。 笑死篙螟,一個胖子當(dāng)著我的面吹牛菌湃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遍略,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼惧所,長吁一口氣:“原來是場噩夢啊……” “哼骤坐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起下愈,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤纽绍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后势似,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拌夏,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年履因,在試婚紗的時候發(fā)現(xiàn)自己被綠了障簿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡栅迄,死狀恐怖站故,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毅舆,我是刑警寧澤世蔗,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站朗兵,受9級特大地震影響污淋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜余掖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一寸爆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盐欺,春花似錦赁豆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粉洼,卻和暖如春节预,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背属韧。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工安拟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宵喂。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓糠赦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拙泽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

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