天天看點

重新認識Docker Compose之Sidecar模式

在微服務盛行的今天,我們通常是這麼定義Compose的:對容器的統一啟動和關閉的編排工具。

但是我以前還是有個疑惑,誰會用Compose在一台伺服器上部署多個服務呢?幹脆直接用單體服務就行了!直到我遇到了以下的一個需求,讓我明白了在一台伺服器上不得不用多個服務的時候,Compose可以通過sidecar的模式,讓服務很簡單的通過127.0.0.1調用另一個服務

一個用golang開發的某個項目,希望根據學生資訊列印學籍,學籍表其中一部分如下

重新認識Docker Compose之Sidecar模式

 go中并不是沒有操作word的庫,但是操作這樣一個複雜的word,并且填好資訊還是有很大難度。是以我們想到了一個實作方案。

重新認識Docker Compose之Sidecar模式

這樣相對往word裡填值就簡單很多,其中一部分代碼

我在github了沒找到golang把excel轉成pdf的庫(有推薦可以留言),于是想到了.net裡的FreeSpire.Xls庫可以很友善實作excel轉pdf的功能,是以需要有個.net api把go生産并填好的excel轉成pdf,于是我建立了一個.net webapi,項目名定義成pdfprocessor,其中定一個Controller

因為這是一個很小的單體項目,那麼如何使這個部署與調用相對簡單就是我需要考慮的問題了,這時候我想到了Docker Compose。

我可以通過docker-compose同時啟動go api和.net api,最重要的還是可以讓go與.net項目使用同一個network的方式,使go api通過127.0.0.1:port來調用.net api,拓撲如下

重新認識Docker Compose之Sidecar模式

這樣.net api就成了go api的一個sidecar,為其服務

編寫go的dockerfile

編寫.net的dockerfile

編寫docker-compose.yaml,讓goapi與.net api使用同一個network

檢視pdf展示效果

重新認識Docker Compose之Sidecar模式
重新認識Docker Compose之Sidecar模式

最後想說docker-compose真香!