Docker Compose入門使用指南

目錄

  1. 簡介
  2. Compose簡單應(yīng)用

1. 簡介

Dockerfile 可以讓用戶管理一個單獨的應(yīng)用容器狂丝;而Compose則允許用戶在一個模板(YAML 格式)中定義一組相關(guān)聯(lián)的應(yīng)用容器(被稱為一個project,即項目)甸昏,例如一個 Web 服務(wù)容器再加上后端的數(shù)據(jù)庫服務(wù)容器等。

Compose是一個用于定義和運行多容器Docker應(yīng)用程序的工具垛膝。通過Compose豹爹,您可以使用Compose文件配置應(yīng)用程序的服務(wù)。然后浪蹂,使用單個命令,從配置中創(chuàng)建和啟動所有服務(wù)告材。

Compose非常適用于開發(fā)坤次,測試和組織(臨時)環(huán)境,以及CI工作流斥赋。

使用Docker Compose基本上包括以下三步流程:

  1. 通過Dockerfile定義您的應(yīng)用環(huán)境以便于它能夠在任何地方重用缰猴。
  2. 在docker-compose.yml中定義組成應(yīng)用程序的服務(wù),以便它們可以在隔離的環(huán)境中一起運行疤剑。
  3. 最后滑绒,運行docker-compose up,并將Compose啟動并運行整個應(yīng)用程序。

Docker Compose具有如下的特性:

  • 單個主機中具有多個隔離環(huán)境
  • 當容器創(chuàng)建時保存容器卷數(shù)據(jù)
  • 僅重建已更改的容器
  • 變量和在環(huán)境之間移動

2. Compose簡單應(yīng)用

Docker官方簡單示例介紹骚露。

  1. 創(chuàng)建項目目錄
# mkdir composetest
# cd composetest
  1. 創(chuàng)建 Python 的程序app.py蹬挤,功能就是利用 redis 的 incr 方法進行訪問計數(shù)。
 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. 由于 Python 依賴的flask棘幸、redis組件都需要另外安裝,比如使用 pip來安裝倦零,單獨設(shè)置一文件requirements.txt误续,內(nèi)容如下:
flask
redis
  1. 創(chuàng)建 service 依賴的第一個 image,app.py 程序的運行環(huán)境扫茅,利用 Dockerfile 來制作蹋嵌,內(nèi)容如下:
 FROM python:2.7 #基于 python:2.7 鏡像
 ADD . /code  #將本地目錄中的內(nèi)容添加到 container 的 /code 目錄下
 WORKDIR /code  #設(shè)置程序工作目錄為 /code
 RUN pip install -r requirements.txt   #運行安裝命令
 CMD python app.py  #啟動程序
  1. Dockerfile創(chuàng)建好就可以制作鏡像了,運行下面命令生成Docker鏡像:
# 生成Docker鏡像
docker build -t compose/python_app . 

Docker鏡像生成成功后通過docker images查看即能看到:

docker images                                   
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
compose/python_app     latest              a92fed00abd        59 minutes ago      680.4 MB
  1. 配置Docker Compose配置文件docker-compose.yml, 定義版本和服務(wù)等信息葫隙。
version: '2'
services:
    web:
        image: compose/python_app
        ports:
         - "5000:5000"
        volumes:
         - .:/code
        depends_on:
         - redis
    redis:
        image: redis

說明:配置中創(chuàng)建了2個service栽烂,web和redis,各自有依賴的鏡像恋脚,其中web服務(wù)開放container的5000端口腺办,并與host的5000端口應(yīng)對,方便通過 localhost:5000來訪問糟描, volumes 即將本地目錄中的文件加載到容器的 /code 中怀喉,depends_on表明services web需要依賴另一個 service redis

  1. 生成并啟動服務(wù)
# docker-compose up

Attaching to composetestbypython_redis_1
redis_1  | 1:C 04 Nov 10:35:17.448 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1  |                 _._
redis_1  |            _.-``__ ''-._
redis_1  |       _.-``    `.  `_.  ''-._           Redis 3.2.5 (00000000/0) 64 bit
redis_1  |   .-`` .-```.  ```\/    _.,_ ''-._
redis_1  |  (    '      ,       .-`  | `,    )     Running in standalone mode
redis_1  |  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
redis_1  |  |    `-._   `._    /     _.-'    |     PID: 1
redis_1  |   `-._    `-._  `-./  _.-'    _.-'
redis_1  |  |`-._`-._    `-.__.-'    _.-'_.-'|
redis_1  |  |    `-._`-._        _.-'_.-'    |           http://redis.io
redis_1  |   `-._    `-._`-.__.-'_.-'    _.-'
redis_1  |  |`-._`-._    `-.__.-'    _.-'_.-'|
redis_1  |  |    `-._`-._        _.-'_.-'    |
redis_1  |   `-._    `-._`-.__.-'_.-'    _.-'
redis_1  |       `-._    `-.__.-'    _.-'
redis_1  |           `-._        _.-'
redis_1  |               `-.__.-'
redis_1  |
redis_1  | 1:M 04 Nov 10:35:17.450 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1  | 1:M 04 Nov 10:35:17.450 # Server started, Redis version 3.2.5
redis_1  | 1:M 04 Nov 10:35:17.451 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1  | 1:M 04 Nov 10:35:17.451 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1  | 1:M 04 Nov 10:35:17.451 * The server is now ready to accept connections on port 6379

Compose啟動和部署成功后船响,通過命令查看容器運行情況躬拢。

# docker-compose ps                                                                       
          Name                          Command               State           Ports
---------------------------------------------------------------------------------------------
composetestbypython_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
composetestbypython_web_1     /bin/sh -c python app.py         Up      0.0.0.0:5000->5000/tcp

通過瀏覽器訪問http://localhost:5000就能看到相關(guān)的發(fā)布信息躲履。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市聊闯,隨后出現(xiàn)的幾起案子工猜,更是在濱河造成了極大的恐慌,老刑警劉巖菱蔬,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篷帅,死亡現(xiàn)場離奇詭異,居然都是意外死亡汗销,警方通過查閱死者的電腦和手機犹褒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弛针,“玉大人叠骑,你說我怎么就攤上這事∠髯拢” “怎么了宙枷?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茧跋。 經(jīng)常有香客問我慰丛,道長,這世上最難降的妖魔是什么瘾杭? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任诅病,我火速辦了婚禮,結(jié)果婚禮上粥烁,老公的妹妹穿的比我還像新娘贤笆。我一直安慰自己,他們只是感情好讨阻,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布芥永。 她就那樣靜靜地躺著,像睡著了一般钝吮。 火紅的嫁衣襯著肌膚如雪埋涧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天奇瘦,我揣著相機與錄音棘催,去河邊找鬼。 笑死链患,一個胖子當著我的面吹牛巧鸭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播麻捻,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼纲仍,長吁一口氣:“原來是場噩夢啊……” “哼呀袱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起郑叠,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤夜赵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乡革,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寇僧,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年沸版,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘁傀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡视粮,死狀恐怖细办,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蕾殴,我是刑警寧澤笑撞,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站钓觉,受9級特大地震影響茴肥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荡灾,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一瓤狐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧批幌,春花似錦芬首、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赦政。三九已至胜宇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恢着,已是汗流浹背桐愉。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掰派,地道東北人从诲。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像靡羡,于是被迫代替她去往敵國和親系洛。 傳聞我的和親對象是個殘疾皇子俊性,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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