1. 程式人生 > >微服務SpringCloud容器化案例

微服務SpringCloud容器化案例

前言

當我們在使用微服務的時候,那麼有一個問題一定會困擾我們,那就是專案的測試和部署。因為在單體應用下,部署專案很簡單,直接打包啟動就可以了,而對於微服務來說,因為有各個元件的存在所以讓測試和部署都變得很麻煩,而容器化是微服務的部署一把利劍。

PS:本文不介紹具體docker使用的各種基礎,以及微服務的各種基礎,就是給出相應的案例,你可以根據這樣的案例快速學會如何將你的微服務容器化。

 

實際案例

讓我們先來看看,實現之後如果本地要進行測試,是多麼方便。

只需要一個命令,就能將我們的服務都啟動起來,包括註冊中心,閘道器,服務都啟動了,你不需要三四臺伺服器,也不需要安裝配置各種複雜的環境。
當我們要停止所有服務的時候呢?

實際案例:https://github.com/LinkinStars/MicroServiceExample/tree/dockerization

 

微服務容器化的步驟

  1. 編寫Dockerfile構建單個映象
  2. 編寫docker-compose.yml進行容器編排
  3. 修改各個應用中的application.yml的一些訪問地址

 

容器化相關命令

單獨部署:

進入某個應用的目錄(目錄下有Dockerfile)

使用命令:docker build -t mic-eureka .

 

整體編排部署:

進入根目錄(目錄下有docker-compose.yml)

使用命令:docker-compose up -d

 

容器化說明

在所有module每個目錄下面都存在一個Dockerfile,類似如下:

# 基礎映象
FROM java:openjdk-8u111

# 作者
MAINTAINER LinkinStar [email protected]

# 將build/libs下的jar包拷貝到容器中的根目錄,並命名為app.jar
COPY build/libs/*.jar /app.jar

# 宣告開放埠
EXPOSE 8761

# 啟動應用
ENTRYPOINT ["java", "-jar", "app.jar"]

容器編排:

在根目錄下有docker-compose.yml檔案,用於進行容器編排:

# 宣告版本
version: '3'

# 宣告各個服務services
services:
  # 服務名稱
  mic-eureka:
    # 構建當前服務的Dockerfile位置
    build:
      context: eureka
    # 映象名稱
    image: mic-eureka:latest
    # 對映的開放埠
    ports:
      - 8761:8761
  
  mic-gateway:
    build:
      context: gateway
    image: mic-gateway:latest
    # 需要關聯的應用,這些關聯的應用可以通過下面的名稱來訪問,類似域名的概念
    links:
      - mic-eureka
      - mic-pay
      - mic-order
    ports:
      - 8769:8769
      
  mic-pay:
    build:
      context: pay
    image: mic-pay:latest
  
  mic-order:
    build:
      context: order
    image: mic-order:latest
 

總結

對於jar包,我們還是需要手動用gradle的bootJar進行打包,其實可以編寫相應的shell指令碼來完成,這樣更加的自動方便一些。 針對實際專案中,還有資料庫,redis,mq這些都可以交由容器去進行部署和編排,這裡只是拋磚引玉,對於這些的部署和實現就交給你來完成啦。