微服務SpringCloud容器化案例
阿新 • • 發佈:2018-11-08
前言
當我們在使用微服務的時候,那麼有一個問題一定會困擾我們,那就是專案的測試和部署。因為在單體應用下,部署專案很簡單,直接打包啟動就可以了,而對於微服務來說,因為有各個元件的存在所以讓測試和部署都變得很麻煩,而容器化是微服務的部署一把利劍。
PS:本文不介紹具體docker使用的各種基礎,以及微服務的各種基礎,就是給出相應的案例,你可以根據這樣的案例快速學會如何將你的微服務容器化。
實際案例
讓我們先來看看,實現之後如果本地要進行測試,是多麼方便。

只需要一個命令,就能將我們的服務都啟動起來,包括註冊中心,閘道器,服務都啟動了,你不需要三四臺伺服器,也不需要安裝配置各種複雜的環境。
當我們要停止所有服務的時候呢?
實際案例:https://github.com/LinkinStars/MicroServiceExample/tree/dockerization
微服務容器化的步驟
- 編寫Dockerfile構建單個映象
- 編寫docker-compose.yml進行容器編排
- 修改各個應用中的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這些都可以交由容器去進行部署和編排,這裡只是拋磚引玉,對於這些的部署和實現就交給你來完成啦。