docker-compose 學(xué)習(xí)筆記

最近學(xué)習(xí)《第一本docker書》萎攒, 學(xué)習(xí)完 Docker Compose 這一章節(jié)之后打算自己使用它來(lái)構(gòu)建一個(gè)使用 php 和 python 做的簡(jiǎn)易web app葡秒, 遂作此記錄矩父。本篇學(xué)習(xí)筆記只是為了學(xué)習(xí)docker-compose的用法妆档, 并不具體介紹flask和php的語(yǔ)法憎瘸。

一、Docker Compose

? 使用 Docker Compose 可以用一個(gè)YAML文件定義一組要啟動(dòng)的容器谨垃, 以及容器運(yùn)行時(shí)的屬性, Docker Compose稱這些容器為 “服務(wù)”硼控。

二刘陶、實(shí)現(xiàn)過(guò)程

? 新建文件夾flask-php 作為項(xiàng)目根目錄, cd 到flask-php文件夾牢撼, 新建文件夾product匙隔, 進(jìn)入product 并創(chuàng)建一個(gè)名為api.py的文件,其功能是提供給我們必要的數(shù)據(jù):

from flask import Flask
from flask_restful import Resource, Api
?
app = Flask(__name__)
api = Api(app)
?
class Product(Resource):
    def get(self):
        return {
            'products': ['Apple', 'Candy', 'Pineapple']
        }
?
api.add_resource(Product, '/')
?
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)

新建requirements.txt文件熏版, 用于在構(gòu)建鏡像時(shí)安裝必要的python依賴包

Flask==0.12
flask-restful==0.3.5

新建Dockerfile文件纷责, 幫助我們之后進(jìn)行鏡像的構(gòu)建

FROM python:3.5
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r requirements.txt
CMD ["python", "api.py"]

cd到項(xiàng)目的根目錄, 新建一個(gè)名為web的文件夾撼短,進(jìn)入web文件夾并新建index.php文件

<html>
 <head>
 <title>Docker Compose Test</title>
 </head>
?
 <body>
 <h1>Welcome Here</h1>
 <ul>
 <?php
     $json = file_get_contents('http://product/');
     $data = json_decode($json);
     $products = $data->products;
     foreach ($products as $product) {
         echo "<li>$product</li>";
     }
 ?>
 </ul>
 </body>
</html>

接著再膳,我們需要為我們的web app構(gòu)建鏡像, 我們可以配置Compose來(lái)構(gòu)建鏡像并創(chuàng)建需要的服務(wù)曲横。 在compose中喂柒, 我們定義一組要啟動(dòng)的服務(wù)(以dockers容器的形式表現(xiàn)),我們還定義了我們希望這些服務(wù)要啟動(dòng)的運(yùn)行時(shí)屬性禾嫉, 這些屬性和 docker run 命令需要的參數(shù)類似灾杰,將所有與服務(wù)有關(guān)的屬性定義在一個(gè) YAML 文件中。 回到項(xiàng)目根目錄夭织,新建一個(gè)docker-compose.yml文件吭露,內(nèi)容如下:

version: '3'
services:
 product:
 build: ./product
 volumes:
 - ./product:/usr/src/app
 ports:
 - 5001:80
?
 web:
 image: php:apache
 volumes:
 - ./web:/var/www/html
 ports:
 - 5000:80
 depends_on:
 - product

? 第一行的version: '3'并不是指定你安裝的Docker Compose的版本, 實(shí)際上他和 Docker Compose的版本并無(wú)直接關(guān)系尊惰, 它指明的是你的compose file是使用版本3的格式來(lái)進(jìn)行編寫的讲竿。

? 第二行開(kāi)始就是我們docker-compose文件的主要內(nèi)容, 它啟動(dòng)了兩個(gè)服務(wù): product和web弄屡。

? 對(duì)于product服務(wù)题禀,我們先使用bulid構(gòu)建一個(gè)鏡像, 服務(wù)除了可以基于指定的鏡像膀捷,還可以基于一份 Dockerfile迈嘹,它可以指定 Dockerfile 所在文件夾的路徑, 在本例中為docker-compose.yml所在目錄下的product文件夾。之后秀仲,我們使用volumes 掛載一個(gè)目錄融痛, 最后,我們使用ports進(jìn)行端口映射神僵, 本例是將容器的80端口映射到宿主機(jī)的5001端口之上雁刷。

? 對(duì)于web服務(wù), 它與product服務(wù)類似保礼, 不同之處在于它直接使用了image指定了要使用的鏡像沛励, 注意最后的depends_on,一般項(xiàng)目容器啟動(dòng)的順序是有要求的炮障,如果直接從上到下啟動(dòng)容器目派,必然會(huì)因?yàn)槿萜饕蕾噯?wèn)題而啟動(dòng)失敗,所以在yml文件中我們通過(guò)depend_on標(biāo)簽來(lái)先啟動(dòng)product服務(wù)胁赢, 解決容器的依賴企蹭。

? 以上步驟完成后, 整個(gè)項(xiàng)目的結(jié)構(gòu)應(yīng)該是:

E:.
│  docker-compose.yml
│
├─product
│      api.py
│      Dockerfile
│      requirements.txt
│
└─web
       index.php

三徘键、運(yùn)行Compose

? 回到項(xiàng)目根目錄练对, 通過(guò)docker-compose up命令來(lái)執(zhí)行這些服務(wù)遍蟋。

? 在瀏覽器中輸入 localhost:5000 來(lái)訪問(wèn)我們的web app吹害, 顯示如下:

pic1.jpg

同樣,我們也可以通過(guò)localhost:5001 來(lái)訪問(wèn)我們的api:

pic2.jpg

四虚青、總結(jié)

使用compose能夠非常簡(jiǎn)單的構(gòu)建一個(gè)需要Doker容器的應(yīng)用程序它呀, 本例子只展示了Compose最表層的能力,Compose的官網(wǎng)上有很多例子棒厘,比如使用Rails纵穿、DjangoWordPress來(lái)展現(xiàn)更高級(jí)的概念奢人。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谓媒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子何乎,更是在濱河造成了極大的恐慌句惯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件支救,死亡現(xiàn)場(chǎng)離奇詭異抢野,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)各墨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門指孤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事恃轩〗嵬荩” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵叉跛,是天一觀的道長(zhǎng)补君。 經(jīng)常有香客問(wèn)我,道長(zhǎng)昧互,這世上最難降的妖魔是什么挽铁? 我笑而不...
    開(kāi)封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮敞掘,結(jié)果婚禮上叽掘,老公的妹妹穿的比我還像新娘。我一直安慰自己玖雁,他們只是感情好更扁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赫冬,像睡著了一般浓镜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劲厌,一...
    開(kāi)封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天膛薛,我揣著相機(jī)與錄音,去河邊找鬼补鼻。 笑死哄啄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的风范。 我是一名探鬼主播咨跌,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼硼婿!你這毒婦竟也來(lái)了锌半?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寇漫,失蹤者是張志新(化名)和其女友劉穎刊殉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體猪腕,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冗澈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陋葡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亚亲。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捌归,到底是詐尸還是另有隱情肛响,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布惜索,位于F島的核電站特笋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巾兆。R本人自食惡果不足惜猎物,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望角塑。 院中可真熱鬧蔫磨,春花似錦、人聲如沸圃伶。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窒朋。三九已至搀罢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侥猩,已是汗流浹背榔至。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拭宁,地道東北人洛退。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓瓣俯,卻偏偏與公主長(zhǎng)得像杰标,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子彩匕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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