[Docker] docker-compose使用教程

前文鏈接

[Docker] 入門教程
http://www.reibang.com/writer#/notebooks/20574865/notes/37511203

簡介

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application's services. Then, using a single command, you create and start all the services from your configuration.

Compose是一個用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。使用組合帚桩,可以使用組合文件配置應(yīng)用程序的服務(wù)隧枫。然后砖瞧,使用單個命令從配置中創(chuàng)建和啟動所有服務(wù)揭措。

我們從logo上可以看出來, 說白了, 這個東西就是一個管理容器的工(zhang)具(yu), 我們可以方便的使用它來管理我們的docker容器, 可以極大程度的簡化命令行的復(fù)雜操作.

一.快速開始

如果你是MacWindows用戶使用桌面版本的Docker應(yīng)用默認(rèn)就會替你安裝docker-compose(下文中用dc代替), 如果是centos的話可以使用命令yum -y install docker-compose太簡單了不做過多說明.

查看版本蔫耽,能顯示出來證明安裝成功了

zhangyideMacBook-Pro:~ objcat$ docker-compose version
docker-compose version 1.23.1, build b02f1306
docker-py version: 3.5.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018

接下來我們有需求了见秤, 運(yùn)行一個service-a掛載到/usr/local, 映射端口為8082并添加servicehost域名映射內(nèi)網(wǎng)ip控乾,很多人可以想到那應(yīng)該是一條冗長docker命令

docker run -idt -p 8082:8082 -v /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar --name service-a java sh -c "echo 192.168.1.126 servicehost >> /etc/hosts && java -jar /usr/local/service-a.jar"

這么一大坨,看起來十分不方便罪治,那么我們就是用docker-compose來優(yōu)化一下

首先創(chuàng)建一個名為docker-compose.yml的文件

zhangyideMacBook-Pro:jar objcat$ touch docker-compose.yml

之后隨便是用一個文本編輯器打開秋泄,寫入下面內(nèi)容

version: '2'
services:
 service-a: 
   image: java
   volumes:
     - /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar
   ports:
     - 8082:8082
   command:
     - /bin/sh
     - -c
     - |
       echo 192.168.1.126 servicehost >> /etc/hosts
       java -jar /usr/local/service-a.jar

這樣看起來是不是思路清晰多了呢,我們接下來運(yùn)行一下

zhangyideMacBook-Pro:jar objcat$ docker-compose up -d
Creating network "jar_default" with the default driver
Creating jar_service-a_1_495464b09e67 ... done

-d后臺運(yùn)行规阀,否則運(yùn)行l(wèi)og就會出現(xiàn)在你的屏幕上。瘦麸。谁撼。

然后查看一下運(yùn)行狀態(tài)

zhangyideMacBook-Pro:jar objcat$ docker-compose ps
         Name                   Command           State           Ports         
--------------------------------------------------------------------------------
jar_service-             /bin/sh -c echo          Up      0.0.0.0:8082->8082/tcp
a_1_5827fa3204e8         192.168.1. ...   

我們可以看到服務(wù)已經(jīng)運(yùn)行起來了,我們試著訪問一下
http://localhost:8082/hello

成功滋饲,這一部分告一段落厉碟。

二.運(yùn)行多個服務(wù)

有的人會問,多個服務(wù)怎么運(yùn)行呢屠缭?很簡單箍鼓,我們這里就來做一下。

下面我要做的是開啟三個服務(wù)service-a, service-b, service-eureka呵曹,分別是一個注冊中心和兩個服務(wù)。

我們來完善一下docker-compose.yml

version: '2'

services:

 service-eureka: 
   image: java
   volumes:
     - /Users/objcat/jar/service-eureka.jar:/usr/local/service-eureka.jar
   ports:
     - 8081:8081
   command:
     - /bin/sh
     - -c
     - |
       echo 192.168.1.126 servicehost >> /etc/hosts
       java -jar /usr/local/service-eureka.jar

 service-a: 
   image: java
   volumes:
     - /Users/objcat/jar/service-a.jar:/usr/local/service-a.jar
   ports:
     - 8082:8082
   command:
     - /bin/sh
     - -c
     - |
       echo 192.168.1.126 servicehost >> /etc/hosts
       java -jar /usr/local/service-a.jar

 service-b: 
   image: java
   volumes:
     - /Users/objcat/jar/service-b.jar:/usr/local/service-b.jar
   ports:
     - 8083:8083
   command:
     - /bin/sh
     - -c
     - |
       echo 192.168.1.126 servicehost >> /etc/hosts
       java -jar /usr/local/service-b.jar

我們來運(yùn)行一下

zhangyideMacBook-Pro:jar objcat$ docker-compose up -d
jar_service-a_1_5827fa3204e8 is up-to-date
Creating jar_service-b_1_f7d01c317fab      ... done
Creating jar_service-eureka_1_57bb1a079e9b ... done
zhangyideMacBook-Pro:jar objcat$ docker-compose ps
              Name                             Command               State           Ports         
---------------------------------------------------------------------------------------------------
jar_service-a_1_5827fa3204e8        /bin/sh -c echo 192.168.1. ...   Up      0.0.0.0:8082->8082/tcp
jar_service-b_1_be87c0458e53        /bin/sh -c echo 192.168.1. ...   Up      0.0.0.0:8083->8083/tcp
jar_service-eureka_1_933d5a60af31   /bin/sh -c echo 192.168.1. ...   Up      0.0.0.0:8081->8081/tcp
zhangyideMacBook-Pro:jar objcat$ 

注冊中心

訪問service-a

訪問service-b

到這里我們已經(jīng)可以運(yùn)行起來多個服務(wù)了!1宋凇C喔!下課 - -

命令擴(kuò)充

停止服務(wù)

zhangyideMacBook-Pro:jar objcat$ docker-compose stop
Stopping jar_service-eureka_1_933d5a60af31 ... done
Stopping jar_service-b_1_be87c0458e53      ... done
Stopping jar_service-a_1_5827fa3204e8      ... done

停止單個服務(wù)

zhangyideMacBook-Pro:jar objcat$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
94c3472638c8        java                "/bin/sh -c 'echo 19…"   16 minutes ago      Up 6 seconds        0.0.0.0:8081->8081/tcp   jar_service-eureka_1_933d5a60af31
8d1dfa0ec642        java                "/bin/sh -c 'echo 19…"   16 minutes ago      Up 6 seconds        0.0.0.0:8083->8083/tcp   jar_service-b_1_be87c0458e53
6be5f9d8f423        java                "/bin/sh -c 'echo 19…"   33 minutes ago      Up 6 seconds        0.0.0.0:8082->8082/tcp   jar_service-a_1_5827fa3204e8
zhangyideMacBook-Pro:jar objcat$ docker stop 6be5f9d8f423
6be5f9d8f423

重新運(yùn)行服務(wù)

zhangyideMacBook-Pro:jar objcat$ docker-compose up -d
jar_service-b_1_be87c0458e53 is up-to-date
Starting jar_service-a_1_5827fa3204e8 ... 
Starting jar_service-a_1_5827fa3204e8 ... done
zhangyideMacBook-Pro:jar objcat$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
94c3472638c8        java                "/bin/sh -c 'echo 19…"   19 minutes ago      Up 3 minutes        0.0.0.0:8081->8081/tcp   jar_service-eureka_1_933d5a60af31
8d1dfa0ec642        java                "/bin/sh -c 'echo 19…"   19 minutes ago      Up 3 minutes        0.0.0.0:8083->8083/tcp   jar_service-b_1_be87c0458e53
6be5f9d8f423        java                "/bin/sh -c 'echo 19…"   36 minutes ago      Up 13 seconds       0.0.0.0:8082->8082/tcp   jar_service-a_1_5827fa3204e8

我們可以看到docker-compose會自動識別容器的開啟狀態(tài)跨新,替我們開啟需要開啟的那一個

三.內(nèi)容補(bǔ)充

1.可能很多人對我的echo 192.168.1.126 servicehost >> /etc/hosts不是很理解

這里說一下富腊,這句命令的意思是,把servicehost域名加入到hosts文件域帐,目的是為了能讓我的eureka發(fā)現(xiàn)我的服務(wù)赘被,而不是把地址寫死在配置文件中是整,這句命令對應(yīng)的服務(wù)配置為

server:
  #服務(wù)端口號
  port: 8082
spring:
  application:
    #服務(wù)名稱 - 服務(wù)之間使用名稱進(jìn)行通訊
    name: service-objcat-a
eureka:
  client:
    service-url:
      #填寫注冊中心服務(wù)器地址
      defaultZone: http://servicehost:8081/eureka
    #是否需要將自己注冊到注冊中心
    register-with-eureka: true
    #是否需要搜索服務(wù)信息
    fetch-registry: true
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
management:
  endpoints:
    web:
      exposure:
        include: "*"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市民假,隨后出現(xiàn)的幾起案子浮入,更是在濱河造成了極大的恐慌,老刑警劉巖阳欲,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舵盈,死亡現(xiàn)場離奇詭異,居然都是意外死亡球化,警方通過查閱死者的電腦和手機(jī)秽晚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筒愚,“玉大人赴蝇,你說我怎么就攤上這事〕膊簦” “怎么了句伶?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陆淀。 經(jīng)常有香客問我考余,道長,這世上最難降的妖魔是什么轧苫? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任楚堤,我火速辦了婚禮,結(jié)果婚禮上含懊,老公的妹妹穿的比我還像新娘身冬。我一直安慰自己,他們只是感情好岔乔,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布酥筝。 她就那樣靜靜地躺著,像睡著了一般雏门。 火紅的嫁衣襯著肌膚如雪嘿歌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天剿配,我揣著相機(jī)與錄音搅幅,去河邊找鬼。 笑死呼胚,一個胖子當(dāng)著我的面吹牛茄唐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼沪编,長吁一口氣:“原來是場噩夢啊……” “哼呼盆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚁廓,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤访圃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后相嵌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腿时,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年饭宾,在試婚紗的時候發(fā)現(xiàn)自己被綠了批糟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡看铆,死狀恐怖徽鼎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弹惦,我是刑警寧澤否淤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站棠隐,受9級特大地震影響石抡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜助泽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一汁雷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧报咳,春花似錦、人聲如沸挖藏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膜眠。三九已至岩臣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宵膨,已是汗流浹背架谎。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辟躏,地道東北人谷扣。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親会涎。 傳聞我的和親對象是個殘疾皇子裹匙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

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