Docker學(xué)習(xí)筆記#4

一行您、compose

compose 作用
你的應(yīng)用可能需要很多個(gè)服務(wù)溜宽,比如web服務(wù)实苞,數(shù)據(jù)庫(kù)服務(wù)豺撑,緩存服務(wù)等等。我們可以把這些服務(wù)放到單獨(dú)的容器里面黔牵,如果手工去配置這些服務(wù)會(huì)有些麻煩聪轿,docker compose可以幫我們解決這個(gè)問題。

我們可以創(chuàng)建一個(gè)compose文件,在這個(gè)文件上面描述你都需要哪些服務(wù),服務(wù)使用什么鏡像鞍盗、數(shù)據(jù)卷、網(wǎng)絡(luò)等等音瓷,然后再用一條命令就可以管理、啟動(dòng)所有的服務(wù)夹抗。

compose 文件
compose文件用的yml格式绳慎,docker規(guī)定了一些指令,使用它們可以去設(shè)置對(duì)應(yīng)的東西,它主要分為了3個(gè)區(qū)域:

  • services是服務(wù)杏愤,在它下面可以定義應(yīng)用需要的一些服務(wù)靡砌,每個(gè)服務(wù)都有自己的名字、使用的鏡像珊楼、掛載的數(shù)據(jù)卷通殃、所屬的網(wǎng)絡(luò)、依賴哪些其他服務(wù)等等厕宗;
  • networks是應(yīng)用的網(wǎng)絡(luò)画舌,在它下面可以定義應(yīng)用的名字、使用的網(wǎng)絡(luò)類型等等媳瞪;
  • volumes是數(shù)據(jù)卷骗炉,在它下面可以定義的數(shù)據(jù)卷(名字等等)照宝,然后掛載到不同的服務(wù)下去使用蛇受;

二、Services

先創(chuàng)建一個(gè)文件夾beck-docker厕鹃,并在里面新建docker-compose.yml文件兢仰,然后使用version指定一下compose使用的版本號(hào)。

compose file

定義服務(wù)

在應(yīng)用里需要定義的服務(wù)剂碴,可以放到services下面把将。比如,我們?nèi)ザx一個(gè)dog的服務(wù)忆矛,使用nginx鏡像察蹲,指定主機(jī)上的8080端口映射到容器中得80端口,也就是nginx的http的訪問端口催训。

version: '2'
services: 
  dog: 
    image: nginx
    ports: 
      - "8080:80"

以同樣的方式洽议,定義一個(gè)cat的服務(wù),同樣使用nginx鏡像漫拭,然后指8081端口對(duì)應(yīng)80端口亚兄。

version: '2'
services: 
  dog: 
    image: nginx
    ports: 
      - "8080:80"
  cat: 
    image: nginx
    ports:
      - "8081:80"

需要注意的是,cat與dog要在同一個(gè)級(jí)別采驻,還有ports是個(gè)數(shù)組审胚,可以指定多個(gè)端口映射關(guān)系。

啟動(dòng)服務(wù)

定義好服務(wù)以后礼旅,在項(xiàng)目的目錄啟動(dòng)這些服務(wù)膳叨,可以執(zhí)行:

docker-compose up
docker-compose up

這樣會(huì)啟動(dòng),在compose文件下定義的所有服務(wù)痘系。由于這是第一次啟動(dòng)這個(gè)服務(wù)菲嘴,所以可以看到它是creating,也就是去創(chuàng)建相關(guān)的東西。首先會(huì)創(chuàng)建這個(gè)服務(wù)使用的網(wǎng)絡(luò)临谱,這里是叫做「beckdocker_default」的網(wǎng)絡(luò)璃俗,然后是dog和cat的服務(wù),這些網(wǎng)絡(luò)和服務(wù)的名字悉默,默認(rèn)會(huì)加上一個(gè)前綴城豁,由于在創(chuàng)建應(yīng)用的時(shí)候沒有指定名字,所以會(huì)默認(rèn)使用項(xiàng)目目錄的名字抄课,后面還有一個(gè)數(shù)字的后綴唱星。最后會(huì)有一個(gè)「Attaching to ...」,將網(wǎng)絡(luò)應(yīng)用到服務(wù)上跟磨。

啟動(dòng)成功后间聊,在瀏覽器訪問一下。8080對(duì)應(yīng)的是dog的服務(wù)抵拘,8081是cat的服務(wù)哎榴。

dog and cat

回到終端,可以看到服務(wù)的訪問日志僵蛛,日志的開頭會(huì)有服務(wù)的名字尚蝌,標(biāo)志著日志是從哪個(gè)服務(wù)來的:


log

如果希望服務(wù)在后臺(tái)運(yùn)行,可以使用-d選項(xiàng)(也就是detach):

docker-compose up -d


服務(wù)的生命周期

查看正在運(yùn)行的服務(wù)充尉,可以執(zhí)行:

docker-compose ps

停止一個(gè)服務(wù)飘言,可以執(zhí)行:

docker-compose stop [服務(wù)名]

如果后面不加服務(wù)名,會(huì)停止所有的服務(wù)驼侠。

啟動(dòng)某一個(gè)服務(wù)姿鸿,可以執(zhí)行:

docker-compose start [服務(wù)名]

如果后面不加服務(wù)名,會(huì)啟動(dòng)所有的服務(wù)倒源。

查看服務(wù)運(yùn)行的log苛预,可以執(zhí)行:

docker-compose logs -f

加上-f選項(xiàng),可以持續(xù)跟中服務(wù)產(chǎn)生的log相速。

docker-compose

進(jìn)入服務(wù)容器中碟渺,可以執(zhí)行:

docker-compose exec dog bash

如果想要?jiǎng)h除服務(wù),我們可以先停止服務(wù)然后執(zhí)行:

docker-compose rm
rm

注意這個(gè)docker-compose rm不會(huì)刪除應(yīng)用的網(wǎng)絡(luò)和數(shù)據(jù)卷突诬。查看一下網(wǎng)絡(luò)苫拍,可以看到應(yīng)用創(chuàng)建的網(wǎng)絡(luò)「beckdocker_default」,如果要?jiǎng)h除所有的這些旺隙,可以使用:

docker-compose down
down

會(huì)提示我們刪除網(wǎng)絡(luò) beckdocker_default绒极。

三、Networks

網(wǎng)絡(luò)決定了服務(wù)之間以及服務(wù)和外界之間如何去通信蔬捷,在執(zhí)行docker-compose up的時(shí)候垄提,docker會(huì)默認(rèn)創(chuàng)建一個(gè)默認(rèn)的網(wǎng)絡(luò)榔袋,創(chuàng)建的服務(wù)也會(huì)默認(rèn)地屬于這個(gè)默認(rèn)網(wǎng)絡(luò)。服務(wù)和服務(wù)之間铡俐,可以使用服務(wù)的名字進(jìn)行通信凰兑。也可以自己創(chuàng)建網(wǎng)絡(luò),并將服務(wù)屬于到這個(gè)網(wǎng)絡(luò)之中审丘,這樣服務(wù)之間可以相互通信吏够,而外界就不能夠與這個(gè)網(wǎng)絡(luò)中的服務(wù)通信,可以保持隔離性滩报。

default network

下面登錄dog服務(wù)去連接cat服務(wù)锅知,登錄到cat服務(wù)連接dog服務(wù):

ping

可以通過服務(wù)的名稱進(jìn)行連接。

自定義網(wǎng)絡(luò)

  1. 在networks中先定義一個(gè)名為animal脓钾,類型為bridge的網(wǎng)絡(luò):
version: '2'
services:
  dog:
    image: nginx
    ports:
      - "8080:80"
  cat:
    image: nginx
    ports:
      - "8081:80"
networks:
  animal:
    driver: bridge
  1. 讓dog和cat服務(wù)使用這個(gè)網(wǎng)絡(luò):
version: '2'
services:
  dog:
    image: nginx
    ports:
      - "8080:80"
    networks:
      - "animal"
  cat:
    image: nginx
    ports:
      - "8081:80"
    networks:
      - "animal"
networks:
  animal:
    driver: bridge
  1. 再增加一個(gè)叫pig的服務(wù)售睹,使用默認(rèn)網(wǎng)絡(luò),來體現(xiàn)于自定義網(wǎng)絡(luò)的隔離性:
version: '2'
services:
  dog:
    image: nginx
    ports:
      - "8080:80"
    networks:
      - "animal"
  cat:
    image: nginx
    ports:
      - "8081:80"
    networks:
      - "animal"
  pig:
    image: nginx
    ports:
      - "8082:80"
    networks:
      - "default"
networks:
  animal:
    driver: bridge
  1. 重新啟動(dòng)應(yīng)用
up

登錄cat服務(wù)可训,嘗試去連接dog服務(wù)和pig服務(wù):

cat ping

因?yàn)閏at與dog同在animal網(wǎng)絡(luò)昌妹,所以可以通過名字連接,而pig在default網(wǎng)絡(luò)中沉噩,所以不能捺宗。

四柱蟀、Volumes

在compose文件中川蒙,還可以指定一些有名字的數(shù)據(jù)卷,讓服務(wù)去使用长已。方法是:在與networks同級(jí)的地方畜眨,添加volumes,接著是數(shù)據(jù)卷的名字术瓮,下面使用driver去指定數(shù)據(jù)卷的類型康聂。

compose volumes

定義好數(shù)據(jù)卷后,就將這個(gè)數(shù)據(jù)卷交給一個(gè)服務(wù)去使用胞四√裰可以用volumes給服務(wù)指定需要使用的數(shù)據(jù)卷:

dog:
  ...
  volumes:
    - nest:/mnt

以dog服務(wù)為例,volumes下指定使用的數(shù)據(jù)卷辜伟,冒號(hào)左邊是數(shù)據(jù)卷名稱氓侧,冒號(hào)右邊是掛載到的docker對(duì)應(yīng)目錄位置。接著給cat服務(wù)也添加同樣的數(shù)據(jù)卷导狡。

compose volumes2

回到終端约巷,執(zhí)行docker-compose up -d,下面測(cè)試一下數(shù)據(jù)卷:

compose volumes3

因?yàn)閏at與dog服務(wù)都使用nest的數(shù)據(jù)卷旱捧,所以在dog中/mnt目錄下創(chuàng)建的data1独郎,在cat服務(wù)的/mnt目錄下可以看到踩麦。

指定位置的數(shù)據(jù)卷
dog和cat都是一個(gè)web服務(wù),現(xiàn)在我想將主機(jī)的某一個(gè)位置當(dāng)做是服務(wù)的一個(gè)內(nèi)容氓癌,那么我們可以去創(chuàng)一個(gè)指定位置的數(shù)據(jù)卷谓谦。首先可以在當(dāng)前目錄,創(chuàng)建./app/web文件夾贪婉,在里面創(chuàng)建個(gè)index.html茁计。

編輯內(nèi)容:

html

內(nèi)容編輯好后,就給dog與cat服務(wù)指定數(shù)據(jù)卷谓松,冒號(hào)左邊是主機(jī)上的目錄星压,冒號(hào)右邊是服務(wù)內(nèi)掛載的目錄:

volumes

說明:/usr/share/nginx/html 目錄是nginx默認(rèn)主機(jī)的根目錄,也就是nginx歡迎界面的目錄鬼譬。

重新啟動(dòng)一下docker-compose up -d娜膘,訪問一下dog與cat服務(wù):

new index
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市优质,隨后出現(xiàn)的幾起案子竣贪,更是在濱河造成了極大的恐慌,老刑警劉巖巩螃,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件演怎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡避乏,警方通過查閱死者的電腦和手機(jī)爷耀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拍皮,“玉大人歹叮,你說我怎么就攤上這事∶保” “怎么了咆耿?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)爹橱。 經(jīng)常有香客問我萨螺,道長(zhǎng),這世上最難降的妖魔是什么愧驱? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任慰技,我火速辦了婚禮,結(jié)果婚禮上冯键,老公的妹妹穿的比我還像新娘惹盼。我一直安慰自己,他們只是感情好惫确,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布手报。 她就那樣靜靜地躺著蚯舱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掩蛤。 梳的紋絲不亂的頭發(fā)上枉昏,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音揍鸟,去河邊找鬼兄裂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛阳藻,可吹牛的內(nèi)容都是我干的晰奖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腥泥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼匾南!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛔外,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蛆楞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夹厌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豹爹,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年矛纹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臂聋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崖技,死狀恐怖逻住,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迎献,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布腻贰,位于F島的核電站吁恍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏播演。R本人自食惡果不足惜冀瓦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望写烤。 院中可真熱鬧翼闽,春花似錦、人聲如沸洲炊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至询微,卻和暖如春崖瞭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撑毛。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工书聚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人藻雌。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓雌续,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親胯杭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子西雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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