docker編排SpringCloud微服務

運行環(huán)境

操作系統(tǒng):windows 10 企業(yè)版

docker for windows:2.0.0.0-win81

docker engine:18.09.0

docker compose:1.23.2

springboot項目構建docker鏡像

maven添加構建docker插件

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
    <configuration>
        //要生成的docker鏡像的名稱
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
    </configuration>
</plugin>
//將jar解壓成目錄結構
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>unpack</id>
            <phase>package</phase>
            <goals>
                <goal>unpack</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${project.version}</version>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

在項目根目錄(與pom.xml同級)下添加Dockerfile,如:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
EXPOSE 8070
ENTRYPOINT ["java","-cp","app:app/lib/*","${springboot項目的啟動類}"]

上面的Dockerfile一定要把${springboot項目的啟動類}替換為自己項目的啟動目錄如com.xiaoyang.Application,其中Application是項目的啟動類。

將項目打包打包成docker鏡像

  1. 方法一:可以直接使用命令(需要配置maven環(huán)境變量):

    mvn clean package dockerfile:build
    

    可能會出現的問題,如:

    [ERROR] Failed to execute goal com.spotify:dockerfile-maven-plugin:1.3.6:build (default-cli) on project crm_service_member: Could not build image: java.util.concurrent.ExecutionException:com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect -> [Help 1]
    

    解決發(fā)放(docker for windows)在沒有TLS的tcp:// localhost:2375上公開守護進程,如圖設置docker for windows :

    image
  2. 方法二较坛,如果方法一實在不能行可以使用方法二(略麻煩,但可以跳過方法一說所的問題):

    第一步作瞄、先編譯好項目爪瓜,在項目根目錄下:

    mvn clean package
    

    第二步、直接使用docker命令運行Dockerfile生成鏡像:

    docker build -t [IMAGE_NAME]:[TAG] PATH
    如:docker build -t config:v1 .
    

    IMAGE_NAME:docker鏡像名

    TAG:docker鏡像tag

    PATH:Dockerfile所在路徑

  3. 其他:可以直接使用IDEA的工具運行指令系宫。

docker-compose服務編排

當所有要發(fā)布的項目都打包編譯好生成docker鏡像后,就可以統(tǒng)一使用docker-compose進行服務的編排建车。

在項目根目錄下建立docker-compose.yml,內容如:

eureka:
  image: spring-cloud-eureka
  ports:
  - 8070:8070
config:
  image: spring-cloud-config
  ports:
  - 8072:8072
  links:
  - center
user:
  image: user-server
  ports:
  - 8081:8081
  links:
  - center
  - config

說明:

  • eureka扩借、config、user是發(fā)布的別名缤至,不固定
  • image是要發(fā)布的docker鏡像名
  • ports是docker服務的端口轉發(fā)
  • links是當前運行的docker鏡像需要訪問的docker鏡像

對服務的修改

? docker鏡像與docker鏡像之間訪問要采用別名潮罪,如config要訪問eureka

? 使用別名如:

eureka:
    instance:
        prefer-ip-address: true
    client:
      registerWithEureka: true
      fetchRegistry: true
      serviceUrl:
          defaultZone: http://center:8070/eureka/

調用配置中心類似

docker-compose啟動順序問題

當我們有多個服務相互依賴,有的時候會出現當前容器所依賴的服務沒有啟動完成導致當前容器啟動失敗领斥,如上述的docker-compose.yml的方式構建就會出現這種情況嫉到。

使用depends_on指定依賴服務,使用restart重啟服務戒突,如:

version: "3"
services:
  eureka:
    image: spring-cloud-eureka
    ports:
    - 8070:8070
    restart: always

  config:
    image: spring-cloud-config
    ports:
    - 8072:8072
    depends_on:
    - eureka

  user:
    image: user-server
    restart: always
    ports:
    - 8081:8081
    depends_on:
      - eureka
      - config

其中restart:always代表重啟屯碴,always表示一直重啟,如果啟動失敗會重新啟動膊存,一直失敗也會一直重新啟動

參考資料
http://spring.io/guides/gs/spring-boot-docker/
https://docs.docker.com/compose/overview/

我的博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末导而,一起剝皮案震驚了整個濱河市忱叭,隨后出現的幾起案子,更是在濱河造成了極大的恐慌今艺,老刑警劉巖韵丑,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異虚缎,居然都是意外死亡撵彻,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門实牡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陌僵,“玉大人,你說我怎么就攤上這事创坞⊥攵蹋” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵题涨,是天一觀的道長偎谁。 經常有香客問我,道長纲堵,這世上最難降的妖魔是什么巡雨? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮席函,結果婚禮上铐望,老公的妹妹穿的比我還像新娘。我一直安慰自己向挖,他們只是感情好蝌以,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布炕舵。 她就那樣靜靜地躺著何之,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咽筋。 梳的紋絲不亂的頭發(fā)上溶推,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音奸攻,去河邊找鬼蒜危。 笑死,一個胖子當著我的面吹牛睹耐,可吹牛的內容都是我干的辐赞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼硝训,長吁一口氣:“原來是場噩夢啊……” “哼响委!你這毒婦竟也來了新思?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赘风,失蹤者是張志新(化名)和其女友劉穎夹囚,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體邀窃,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡荸哟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了瞬捕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞍历。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肪虎,靈堂內的尸體忽然破棺而出堰燎,到底是詐尸還是另有隱情,我是刑警寧澤笋轨,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布秆剪,位于F島的核電站,受9級特大地震影響爵政,放射性物質發(fā)生泄漏仅讽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一钾挟、第九天 我趴在偏房一處隱蔽的房頂上張望洁灵。 院中可真熱鬧,春花似錦掺出、人聲如沸徽千。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽双抽。三九已至,卻和暖如春闲礼,著一層夾襖步出監(jiān)牢的瞬間牍汹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工柬泽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慎菲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓锨并,卻偏偏與公主長得像露该,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子第煮,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容