給Ocelot做乙個Docker 映象

2021-09-08 13:54:43 字數 2828 閱讀 2400

基本的使用方式在園中已有博主寫過了,不過內容是之前版本的,新版本稍微有點不同,還是建議大家看文件。通過文件我們了解,ocelot是通過乙個json檔案進行配置的,所以在使用的時候我們只需要修改這個json檔案就可以了,每次為不同的apigateway建立不同的專案比較麻煩,so,今天來講下如何把ocelot做成乙個docker映象,這樣使用的時候只需要輸入一條docker指令即可。

今天的dockerfile我是fork了ocelot專案後在自己的branch中弄的,直接是專案引用,這只是範例而已,你可以重新建立乙個專門的專案,通過nuget管理新增對ocelot的引用。

dockerfile只是乙個文字檔案,它每一行代表docker映象的乙個layer,每一行由命令加引數組成,我們通過編寫簡單的命令,就能使用docker工具生成docker映象。

首先你要在專案中建立dockerfile,請記住,把你的dockerfile放在sln目錄下,因為dockerfile檔案的build環境是按照你這個檔案的目錄來的,切記,博主之前花了n天才發現這個弱智的問題。docker command對檔名對大小寫敏感。

直接上**:

from microsoft/aspnetcore:2.0 as base #基於asp.net core 2.0映象

expose 80

# 先使用asp.net core build映象,然後複製專案到/src目錄

from microsoft/aspnetcore-build:2.0 as build

workdir /src

copy *.sln ./

copy demos/apigateway.web/apigateway.web.csproj demos/apigateway.web/

copy src/ocelot/ocelot.csproj src/ocelot/

run dotnet restore

copy . .

workdir /src/demos/apigateway.web

run dotnet add package buildbundlerminifier

#這裡新增了對bundle的支援,你可以不使用,因為我更改了樣式,所以這裡加上了這個。

run dotnet restore

from build as publish

from base as final

entrypoint ["dotnet", "apigateway.web.dll"]

上面就是我的dockerfile檔案了,我在專案中並沒有把configuration.json檔案放到專案根目錄,而是另外建立了乙個configurations目錄,這樣我掛載目錄,可以在多個容器中共享資料。

如果你的機器上裝了docker,那可以通過命令工具,在專案的根目錄執行:

docker build -t myocelot:v1 .
注意這個命令後的.一定不要忘記哦

如果你機器上沒有安裝docker,也沒有關係,可以通過docker倉庫或者阿里雲的容器管理進行生成,他們都是免費的,博主使用的是阿里雲容器管理建立的,這樣每次**改動,它會自動生成新的映象。

當我們有了映象後,就可以執行容器了,因為博主用的是阿里雲容器管理,所以我需要先把映象pull到執行環境(我用的是阿里雲ecs)

博主通過pull命令拉了映象後又通過tag命令重新命名了tagname。

隨後我們建立乙個ocelot的配置檔案目錄,並建立configurations.json檔案:

mkdir /home/ocelot

touch /home/ocelot/configurations.json

下面通過vi工具配置你自己的config,下面是博主的:

}後面我們來執行容器:

成功執行以後,我們就可以通過6008埠訪問了,你可以通過 看下demo。下圖為演示截圖:

或許你從demo中看到了樓主對ocelot的改動,樓主增加了downstreamhealthcheckpath屬性,這個是為了對下游伺服器進行healthcheck的,而且樓主也pr給了ocelot的專案負責人,不過tom不太清楚這個屬性有何用,所以我準備做個demo給他看下,這個屬性很有用,除了可以通過試圖檢視下游伺服器狀態,同時也可以在loadbalance的時候把無效的伺服器給忽略掉。

大家覺得healthcheck是否有必要呢?

給Ocelot做乙個Docker 映象

基本的使用方式在園中已有博主寫過了,不過內容是之前版本的,新版本稍微有點不同,還是建議大家看文件。通過文件我們了解,ocelot是通過乙個json檔案進行配置的,所以在使用的時候我們只需要修改這個json檔案就可以了,每次為不同的apigateway建立不同的專案比較麻煩,so,今天來講下如何把oc...

做乙個programmer,而不做乙個coder

programmer是程式的思考者,而coder只是乙個執行者 勞心者製人,勞力者制於人 如果專案不緊的情況下,應該從需求做起,最好能夠窮盡所有的需求,遇到與別人模組互動的情況,規定好與別人互動的介面。然後才是開始設計,抓住需求當中的名詞,想想是否設計成為類,然後根據測試用例,來設計框架結構,至少要...

做乙個心靈富翁

你是否想過 怎樣的人生才是真的有價值?怎樣的生活才算自在而沒有遺憾?得到與失去 付出與收受 快樂與傷心 成功與失敗 我們又該如何看待其中的必然與不必然?親愛的,人生真的很複雜,複雜到我們窮其一生也難以解開奧秘 既然解不開,我們何妨單純看待呢!只要尋找一種屬於自己的簡單的幸福。簡單的幸福裡,也能有真實...