前面講到Passer -> MQ <- Center 通了
今天就來把他們給包一包容器化和收工結尾
Docer file是用來描述起一個Container要包含哪些內容物,通常會先起一個Image然後開始對它加工,有時候我們會用到多個Image,但最終Container只會保留最後的那一個Image,以及定義Container啟動的通關密語(Entrypoint)。
寫Docer file之前我們得先釐清一個Web service container被Host起來需要哪些條件:
為此我們要做幾件事請參照下圖並對照左側行數:
Line 1 : 我們載了SDK Image。(這邊AS Build很重要,Line 17會用到,這技巧稱作multistage。)
Line 2 : cd並建立一個app資料夾作為服務進入點
Line 5 : 我們我們把專案描述依賴套件的文檔放入app資料夾
Line 6 : 執行resotre下載他的依賴套件並且編譯
一、二點完成
Line 9 : 我們把其他專案的相關檔案也都搬運到app底下
Line 10 : 我們把專案Publish出一個Release版本,放到out資料夾,這out資料夾會在app底下。
第三點完成
Line 13 : 下載dotnet core runtime Image為了能把服務host起來。
第四點完成
Line 15 : cd並建立一個app資料夾
Line 17 : 把前面build的publish成果(Line 10 存在out資料夾),搬運到這邊的app資料夾底下。
第三點真的完成了
Line 19 : 每個Container要被驅動的方法唯有透過Entrypoint,我們在這裡設定指令,代表當它被包成Container時會執行"dotnet passer.dll"執行這項服務。
第五點完成
Center同理唷不解釋。
這時一定有人問說啊RabbitMQ勒?這我們交由Compose來實作。
Compose 是當你專案多,彼此又有相依,一個個專案下指令去Host是很累也很耗費成本的事。Compose就是再寫一份腳本來幫你搞定這些事。
這邊我們寫了一份docker-compose.yml
Line 1 : 注名用的是哪一個版本的compose技術
Line 3 : 告訴Docker接下來的內容物都是要起的Service給老子聽清楚(誤
Line 5 : 起一個center 注意不得有空格與大寫
Line 6 : 他會always auto restart.
Line 7 : 他會等rabbitmq service起來之後才會起來
Line 11 ~ Line 16 一樣邏輯
Line 18 : 起一個rabbitmq
Line 19 : 我們直接上docker hub拉image
Line 20 : hostname要跟你專案的hostname對到,前面介紹都用Localhost可以喬一下看想怎樣。
Line 22 : 我忘記這啥了
Line 23 : 開一堆Port。
記得先停掉掉你本地的rabbitmq不然port號會搶到。
到Compose file那層執行:
docker-compose up --build
Ps. 我忘記截rabbitmq後台此時的圖了,反正會跟前面的一樣能work,自己去看看囉。