Docker Compose使用

一褐鸥、Compose安裝

在安裝compose之前乌奇,要確保已經(jīng)安裝了docker1.3或以上版本,在Linux64位系統(tǒng)上安裝compose:


curl -L  [https://github.com/docker/compose/releases/download/1.1.0/docker-compose-](https://github.com/docker/compose/releases/download/1.1.0/docker-compose-) `uname -s`-`uname -m` \

> /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose  

注:當(dāng)然可以選擇安裝command completion(見(jiàn)二)

Uname -s和uname -m中的兩個(gè)引號(hào)是鍵盤上ESC下面的那個(gè)按鍵

此時(shí),compose已經(jīng)安裝成功耽梅,使用命令docker-compose —version可以查看

如果是在OS X系統(tǒng)上,則需要執(zhí)行如下步驟(未親測(cè)):

二、Compose命令補(bǔ)全

確保bash completion已經(jīng)安裝阳欲,如果當(dāng)前使用非最小安裝的Linux,bash completion已經(jīng)OK了陋率,

如果是在MAC上球化,可以使用brew install bash-completion來(lái)安裝,將completion腳本放在

/etc/bash_completion.d/(在MAC上是/usr/local/etc/bash_completion.d/),在下次登錄時(shí),Completion功能已經(jīng)可以使用


curl -L  [https://raw.githubusercontent.com/docker/compose/1.1.0/contrib/completion/bash/docker-compose](https://raw.githubusercontent.com/docker/compose/1.1.0/contrib/completion/bash/docker-compose)  \

> /etc/bash_completion.d/docker-compose

可用的補(bǔ)全取決于在命令行的輸入瓦糟,會(huì)補(bǔ)全:

  • 可用的Docker-compose命令

  • 對(duì)于某一特別命令可用的選項(xiàng)

  • 在一個(gè)給定的上下文條件(比如:具有運(yùn)行或停止?fàn)顟B(tài)的實(shí)例的服務(wù)或者基于鏡像的服務(wù) VS 基于Dockerfile的服務(wù))下筒愚,給出有可行的服務(wù)名稱,對(duì)于docker-compose scale菩浙,補(bǔ)全服務(wù)名稱時(shí)會(huì)自動(dòng)有”=”附加上去

  • 對(duì)于可選項(xiàng)的參數(shù)巢掺,比如:docker-compose kill -s會(huì)完成一些信號(hào)扯再,比如SIGUP和SIGUSR1

三、Compose使用實(shí)例

在本例中將會(huì)實(shí)現(xiàn)啟動(dòng)nginx服務(wù)及一個(gè)數(shù)據(jù)卷容器址遇,并將該數(shù)據(jù)卷容器作為nginx的靜態(tài)文件.

1.創(chuàng)建compose文件夾


sudo mkdir composetest

cd composetest

2.創(chuàng)建docker-compose.yml文件


touch docker-compose.yml

vim docker-compose.yml

在docker-compose.yml中輸入以下內(nèi)容:


dvc:  

  image: debian:wheezy

  volumes:  

   - /www:/usr/share/nginx/html:ro

nginx:

  image: nginx:latest

  volumes_from:

   - dvc

  ports:

   - "8081:80"

3.啟動(dòng)


docker-compose up -d

注:使用命令docker-compose ps查看運(yùn)行狀況

四熄阻、CLI 說(shuō)明(docker-compose 命令)

大多數(shù)Compose命令都是運(yùn)行于一個(gè)或多個(gè)服務(wù)的,如果服務(wù)沒(méi)有指定倔约,該命令將會(huì)應(yīng)用到所有服務(wù)秃殉,如果要獲得所有可用信息,使用命令:docker-compose [COMMAND] —help浸剩,下面是命令(COMMAND)的說(shuō)明:


> build

創(chuàng)建或者再建服務(wù)

服務(wù)被創(chuàng)建后會(huì)標(biāo)記為project_service(比如composetest_db)钾军,如果改變了一個(gè)服務(wù)的Dockerfile或者構(gòu)建目錄的內(nèi)容,可以使用docker-compose build來(lái)重建它

> help

顯示命令的幫助和使用信息

> kill

通過(guò)發(fā)送SIGKILL的信號(hào)強(qiáng)制停止運(yùn)行的容器绢要,這個(gè)信號(hào)可以選擇性的通過(guò)吏恭,比如:

docker-compose kill -s SIGKINT

> logs

顯示服務(wù)的日志輸出

> port

為端口綁定輸出公共信息

> ps

顯示容器

> pull

拉取服務(wù)鏡像

> rm

刪除停止的容器

> run

在服務(wù)上運(yùn)行一個(gè)一次性命令,比如:

docker-compose run web Python manage.py shell

>scale

設(shè)置為一個(gè)服務(wù)啟動(dòng)的容器數(shù)量重罪,數(shù)量是以這樣的參數(shù)形式指定的:service=num樱哼,比如:

docker-compose scale web=2 worker=3

>start

啟動(dòng)已經(jīng)存在的容器作為一個(gè)服務(wù)

>stop

停止運(yùn)行的容器而不刪除它們,它們可以使用命令docker-compose start重新啟動(dòng)起來(lái)

>up

為一個(gè)服務(wù)構(gòu)建剿配、創(chuàng)建搅幅、啟動(dòng)、附加到容器

連接的服務(wù)會(huì)被啟動(dòng)呼胚,除非它們已經(jīng)在運(yùn)行了

默認(rèn)情況下茄唐,docker-compose up會(huì)集中每個(gè)容器的輸出,當(dāng)存在時(shí)蝇更,所有的容器會(huì)停止沪编,運(yùn)行docker-compose up -d會(huì)在后臺(tái)啟動(dòng)容器并使它們運(yùn)行

默認(rèn)情況下,如果服務(wù)存在容器的話年扩,docker-compose up會(huì)停止并再創(chuàng)建它們(使用了volumes-from會(huì)保留已掛載的卷)蚁廓,

如果不想使容器停止并再創(chuàng)建的話,使用docker-compose up --no-recreate常遂,如果有需要的話纳令,這會(huì)啟動(dòng)任何停止的容器

選項(xiàng)


–verbose

顯示更多輸出

–version

顯示版本號(hào)并退出

-f,–file FILE

指定一個(gè)可選的Compose yaml文件(默認(rèn):docker-compose.yml)

-p,–project-name NAME

指定可選的項(xiàng)目名稱(默認(rèn):當(dāng)前目錄名稱)

五挽荠、docker-compose.yml命令說(shuō)明

每一個(gè)定義在docker-compose.yml中的服務(wù)必須明確指定一個(gè)image或者build選項(xiàng)克胳,這與docker run命令行中輸入的是對(duì)應(yīng)相同的,

對(duì)于docker run圈匆,在Dockerfile文件中指定的選項(xiàng)(比如CMD漠另、EXPOSE、VOLUME跃赚、ENV)是默認(rèn)的笆搓,因此不必在docker-compose.yml

中再指定一次.


>image

標(biāo)明image的ID性湿,這個(gè)image ID可以是本地也可以是遠(yuǎn)程的,如果本地不存在满败,Compose會(huì)嘗試去pull下來(lái)

>build

該參數(shù)指定Dockerfile文件的路徑肤频,該目錄也是發(fā)送到守護(hù)進(jìn)程的構(gòu)建環(huán)境(這句有點(diǎn)),

Compose將會(huì)以一個(gè)已存在的名稱進(jìn)行構(gòu)建并標(biāo)記算墨,并隨后使用這個(gè)image

build: /path/to/build/dir  

>command

重寫默認(rèn)的命令

command: bundle exec thin -p 3000  

>links

連接到其他服務(wù)中的容器宵荒,可以指定服務(wù)名稱和這個(gè)鏈接的別名,或者只指定服務(wù)名稱

links:  

- db  

- db:database  

- redis  

此時(shí)净嘀,在容器內(nèi)部报咳,會(huì)在/etc/hosts文件中用別名創(chuàng)建一個(gè)條目,就像這樣:

172.17.2.186  db  

172.17.2.186  database  

172.17.2.186  redis  

環(huán)境變量也會(huì)被創(chuàng)建挖藏,關(guān)于環(huán)境變量的參數(shù)暑刃,會(huì)在后面講到

>external_links

連接到在這個(gè)docker-compose.yml文件或者Compose外部啟動(dòng)的容器,特別是對(duì)于提供共享和公共服務(wù)的容器膜眠。

在指定容器名稱和別名時(shí)岩臣,external_links遵循著和links相同的語(yǔ)義用法

external_links:  

- redis_1  

- project_db_1:mysql  

- project_db_1:postgresql  

>ports

暴露端口,指定兩者的端口(主機(jī):容器)宵膨,或者只是容器的端口(主機(jī)會(huì)被隨機(jī)分配一個(gè)端口)

注:當(dāng)以 主機(jī):容器 的形式來(lái)映射端口時(shí)婿脸,如果使容器的端口小于60,那可能會(huì)出現(xiàn)錯(cuò)誤柄驻,因?yàn)閅AML會(huì)將 xx:yy這樣格式的數(shù)據(jù)解析為六十進(jìn)制的數(shù)據(jù)狐树,基于這個(gè)原因,時(shí)刻記得要將端口映射明確指定為字符串

ports:  

- "3000"  

- "8000:8000"  

- "49100:22"  

- "127.0.0.1:8001:8001"  

>expose

暴露端口而不必向主機(jī)發(fā)布它們鸿脓,而只是會(huì)向鏈接的服務(wù)(linked service)提供抑钟,只有內(nèi)部端口可以被指定

expose:  

- "3000"  

- "8000"  

>volumes

掛載路徑最為卷,可以選擇性的指定一個(gè)主機(jī)上的路徑(主機(jī):容器)野哭,或是一種可使用的模式(主機(jī):容器:ro)

volumes_from:  

- service_name  

- container_name  

>environment

加入環(huán)境變量在塔,可以使用數(shù)組或者字典,只有一個(gè)key的環(huán)境變量可以在運(yùn)行Compose的機(jī)器上找到對(duì)應(yīng)的值拨黔,

這有助于加密的或者特殊主機(jī)的值

environment:  

  RACK_ENV: development  

  SESSION_SECRET:  

environments:  

  - RACK_ENV=development  

  - SESSION_SECRET  

>env_file

從一個(gè)文件中加入環(huán)境變量蛔溃,該文件可以是一個(gè)單獨(dú)的值或者一張列表,在environment中指定的環(huán)境變量將會(huì)重寫這些值

env_file:  

  - .env  

RACK_ENV: development  

>net

網(wǎng)絡(luò)模式篱蝇,可以在docker客戶端的--net參數(shù)中指定這些值

net: "bridge"  

net: "none"  

net: "container:[name or id]"  

net: "host"  

>dns

自定義DNS服務(wù)贺待,可以是一個(gè)單獨(dú)的值或者一張列表

dns: 8.8.8.8  

dns:  

  - 8.8.8.8  

  - 9.9.9.9  

>cap_add,cap_drop

加入或者去掉容器能力,查看man 7 capabilities 可以有一張完整的列表

cap_add:

  - ALL  

cap_drop:  

  - NET_ADMIN  

  - SYS_ADMIN  

>dns_search

自定義DNS搜索范圍零截,可以是單獨(dú)的值或者一張列表

dns_search:  [example.com](http://example.com/) 

dns_search:  

  -  [dc1.example.com](http://dc1.example.com/) 

  -  [dc2.example.com](http://dc2.example.com/) 

>working_dir,entrypoint,user,hostname,domainname,mem_limit,privileged,restart,stdin_open,tty,cpu_shares

上述的每一個(gè)都只是一個(gè)單獨(dú)的值麸塞,和docker run中對(duì)應(yīng)的參數(shù)是一樣的

>cpu_shares: 73

working_dir: /code

entrypoint: /code/entrypoint.sh

user: postgresql

hostname: foo

domainname:  [foo.com](http://foo.com/) 

mem_limit: 1000000000

privileged: true

restart: always

stdin_open: true

tty: true  

六、Compose環(huán)境變量說(shuō)明

環(huán)境變量已經(jīng)不再是用來(lái)連接服務(wù)的推薦方法了涧衙,相反哪工,應(yīng)該使用鏈接名稱(默認(rèn)情況下是鏈接服務(wù)的名稱)作為主機(jī)名稱來(lái)連接奥此,

這可以查看docker-compose.yml的更多細(xì)節(jié),Compose使用Docker links來(lái)暴露服務(wù)的容器給其他的。

每一個(gè)鏈接的容器都使用了一組環(huán)境變量雁比,這每一組環(huán)境變量都是以容器名稱的大寫字母開(kāi)頭的要查看服務(wù)可用的環(huán)境變量稚虎,運(yùn)行docker-compose run SERVICE env


name_PORT

完整URL,如:DB_PORT=tcp//172.17.0.5:5432

name_PORT_num_protocol

完整URL偎捎,如:DB_PORT_5432_TCP= [tcp://172.17.0.5:5432](tcp://172.17.0.5:5432) 

name_PORT_num_protocol_ADDR

容器的IP地址祥绞,如:DB_PORT_5432_TCP_ADDR=172.17.0.5

name_PORT_num_protocol_PORT

暴露的端口號(hào),如:DB_PORT_5432_TCP_PORT=5432

name_PORT_num_protocol_PROTO

協(xié)議(tcp或者udp)鸭限,如:DB_PORT_5432_TCP_PROTO=tcp

name_NAME

完全合格的容器名稱蜕径,如:DB_1_NAME=/myapp_web_1/myapp_db_1

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市败京,隨后出現(xiàn)的幾起案子兜喻,更是在濱河造成了極大的恐慌,老刑警劉巖赡麦,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朴皆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡泛粹,警方通過(guò)查閱死者的電腦和手機(jī)遂铡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晶姊,“玉大人扒接,你說(shuō)我怎么就攤上這事∶茄茫” “怎么了钾怔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蒙挑。 經(jīng)常有香客問(wèn)我宗侦,道長(zhǎng),這世上最難降的妖魔是什么忆蚀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任矾利,我火速辦了婚禮,結(jié)果婚禮上馋袜,老公的妹妹穿的比我還像新娘男旗。我一直安慰自己,他們只是感情好桃焕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布剑肯。 她就那樣靜靜地躺著捧毛,像睡著了一般观堂。 火紅的嫁衣襯著肌膚如雪让网。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天师痕,我揣著相機(jī)與錄音溃睹,去河邊找鬼。 笑死胰坟,一個(gè)胖子當(dāng)著我的面吹牛因篇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笔横,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼竞滓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吹缔?” 一聲冷哼從身側(cè)響起商佑,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厢塘,沒(méi)想到半個(gè)月后茶没,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晚碾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年抓半,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格嘁。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笛求,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糕簿,到底是詐尸還是另有隱情涣易,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布冶伞,位于F島的核電站新症,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏响禽。R本人自食惡果不足惜徒爹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芋类。 院中可真熱鬧隆嗅,春花似錦、人聲如沸侯繁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贮竟。三九已至丽焊,卻和暖如春较剃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背技健。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工写穴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雌贱。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓啊送,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親欣孤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子馋没,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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

  • 1.Compose介紹 Docker Compose是一個(gè)用來(lái)定義和運(yùn)行復(fù)雜應(yīng)用的Docker工具披泪。一個(gè)使用Doc...
    渝味閱讀 7,213評(píng)論 0 2
  • 《Docker從入門到實(shí)踐》閱讀筆記 原書(shū)地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,375評(píng)論 1 39
  • 今日體驗(yàn):今天早上更換奔馳B200的軸承,拆的時(shí)候不是很麻煩搬瑰,裝的時(shí)候半軸裝不上去款票,沒(méi)有經(jīng)驗(yàn)的去干。...
    GL_212a閱讀 113評(píng)論 0 0
  • 【佛告須菩提泽论,凡所有相艾少,皆是虛妄,若見(jiàn)諸相非相翼悴,即見(jiàn)如來(lái)缚够。】 須菩提回答這個(gè)問(wèn)題之后鹦赎,法會(huì)大眾心想...
    德虔閱讀 556評(píng)論 0 1
  • 花鈴子婆婆有一臺(tái)特殊的織布機(jī)谍椅,能夠收集人的心聲織成布,每個(gè)人的心聲都能織成不同的布古话,顏色雏吭、花紋都不一樣。 有的人聽(tīng)...
    匪玉閱讀 1,208評(píng)論 40 27