虹軟開發(fā)新得---容器化部署(docker/.net5/C#)避坑

自從容器(主要是docker)出現(xiàn)后辕翰,分布式部署迎來了一場不小的革命橡庞,開發(fā)運維人員終于可以不用為部署環(huán)境不一致問題扯皮戏仓,同時動態(tài)擴展也大大簡化。Docker加上K8S后客冈,更是爭強對基于docker部署的分布式系統(tǒng)的“三高”(高可用旭从,高可擴,高并發(fā))场仲。對于C#而言和悦,.net core時代的到來,開始了擁抱跨平臺渠缕,對于容器化技術(shù)鸽素,微軟會遲到,但絕不會缺席亦鳞。今天馍忽,我們也來體驗一把利用.net core3.1 WebApi架構(gòu),將虹軟人臉識別項目部署到docker容器中燕差。本文基于虹軟人臉識別SDK 3.0 Windows C++ / X64版本(SDK下載鏈接:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/addFreesdk/1002?from=index)作為講解以及代碼展示遭笋。

生產(chǎn)環(huán)境中,Linux服務(wù)器的數(shù)量遠超Windows server谁不,因此Linux系統(tǒng)才是docker的主戰(zhàn)場坐梯,順便提一句K8S目前也僅支持Linux運行。在Linux系統(tǒng)安裝docker刹帕,根據(jù)Linux版本不同吵血,可能有些差異,主要兩種發(fā)行版安裝參考如下(你可能需要科學(xué)上網(wǎng)):
Ubuntu:https://www.runoob.com/docker/ubuntu-docker-install.html
CentOS:https://www.runoob.com/docker/centos-docker-install.html
環(huán)境好了偷溺,可以干活了蹋辅。下面我們開始擼代碼,實例代碼我去除so挫掏,dll文件以及AppId侦另,Key配置后,放在了github上面(https://github.com/18628271760/MicroService_Face_3_0)大家可以下載參考,添加去除內(nèi)容后褒傅,就可以可以跑起來弃锐。

下面開始避坑提示:

  1. 無法加載錯誤:絕大多數(shù)小伙伴在Windows上開發(fā),再部署到Linux上殿托。因此經(jīng)常直接把虹軟SDK的2個dll格式文件上傳到Linux服務(wù)器霹菊,導(dǎo)致啟動docker時候失敗。原因當(dāng)然是Windows的動態(tài)鏈接庫與Linux版本不兼容引發(fā)的支竹。
    避坑做法是:推薦將dll與so文件同時加載到項目旋廷,方便調(diào)試與部署。編寫完成在本地測試的時候礼搁,選擇dll格式的動態(tài)鏈接庫饶碘,部署上傳到Linux的時候只上傳對應(yīng)的so文件。
  2. “28676(0x7004)”錯誤:官方SDK解釋的很清楚馒吴,SDK_KEY和使用的SDK不匹配扎运。開發(fā)者在虹軟開發(fā)者中心創(chuàng)建一個項目后,會自動生成一個APP_ID募书。這個項目下绪囱,可以有N個版本的SDK测蹲,這些SDK共用一個APP_ID莹捡,但有自己獨立的SDK_KEY(不同系統(tǒng)版本間肯定不一樣!)扣甲。
    避坑做法是:注意在開發(fā)和部署測試的時候篮赢,切換不同的key,與當(dāng)前系統(tǒng)版本一致琉挖。同樣不要忘記不同系統(tǒng)下的引用文件切換启泣。(表揚下虹軟開發(fā),相同代數(shù)的Windows/Linux C++版本函數(shù)完全一致示辈,省去了不少麻煩)寥茫。


    3.png

    4.png
  3. (微軟挖坑!)鏡像缺少依賴(提示找不到libgdiplus組件):由于本實例基于.net core3.1版本矾麻,需要在DockerFile里面加入.net core3.1依賴鏡像纱耻。早期筆者使用的是微軟自帶的.net core3.1鏡像,結(jié)果發(fā)現(xiàn)部署完成后啟動容器险耀,出現(xiàn)依賴缺失問題弄喘。經(jīng)過排查后發(fā)現(xiàn),微軟自帶的.net core3.1鏡像沒有集成libgdiplus庫(libgdiplus是一個Mono庫甩牺,用于對非Windows操作系統(tǒng)提供GDI+兼容的API蘑志,libgdiplus是mono中的System.Drawing依賴的一個組件,用于顯示web頁面基本顏色等〖钡可用于生成netcore驗證碼澎媒,處理圖片等。關(guān)于libgdiplus的詳細信息波桩,請小伙伴參考:http://www.reibang.com/p/f71f9e7138c0
    避坑做法是:引用第三方鏡像( lonwern/aspnetcore-libgdiplus:3.1)可以解決此問題旱幼。(其在Github上的開源地址為:https://github.com/lonwern/aspnetcore-libgdiplus
  4. 無法找到相關(guān)引用:與Windows系統(tǒng)類似,Linux在查找動態(tài)鏈接文件so時突委,也有一定順序柏卤,如下:
    (1) gcc 編譯時指定的運行時庫路徑 -Wl,-rpath
    (2) 環(huán)境變量 LD_LIBRARY_PATH
    (3) ldconfig 緩存 /etc/ld.so.cache
    (4) 系統(tǒng)默認庫位置 /lib以及/usr/lib
    如果我們的so文件沒有在上述位置,Linux 程序運行時自然查找不到匀油,將會報錯缘缚。
    避坑做法是:建議在Linux系統(tǒng)中基于docker部署, libarcsoft_face.so 和libarcsoft_face_engine.so需要拷貝到/usr/lib/目錄下敌蚜,最為簡單方便桥滨。
    5.png

    將程序集上傳到Linux,打包成鏡像文件弛车。鏡像打包參考:
    https://blog.csdn.net/xiaoxionglove/article/details/108962750
    打包成功后齐媒,利用docker images命令參看是否創(chuàng)建成功:
    6.png

    創(chuàng)建成功后,利用docker run命令啟動容器實例纷跛。
    沒有錯誤喻括,利用docker ps -a命令參看下結(jié)果:
    7.png

    打開swagger,測試:
    8.png

    10.png

    總結(jié)贫奠,容器化的部署唬血,簡化了跨平臺的部署,同時也減輕了運維壓力唤崭。但對新手來說拷恨,可能會遇到很多“坑”。不過踩坑爬坑就是能力提升的過程谢肾,希望本期開發(fā)心得對小伙伴使用虹軟容器化部署有個避坑參考腕侄。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芦疏,隨后出現(xiàn)的幾起案子冕杠,更是在濱河造成了極大的恐慌,老刑警劉巖眯分,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拌汇,死亡現(xiàn)場離奇詭異,居然都是意外死亡弊决,警方通過查閱死者的電腦和手機噪舀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門魁淳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人与倡,你說我怎么就攤上這事界逛。” “怎么了纺座?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵息拜,是天一觀的道長。 經(jīng)常有香客問我净响,道長少欺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任馋贤,我火速辦了婚禮赞别,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘配乓。我一直安慰自己仿滔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布犹芹。 她就那樣靜靜地躺著崎页,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腰埂。 梳的紋絲不亂的頭發(fā)上飒焦,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音盐固,去河邊找鬼荒给。 笑死,一個胖子當(dāng)著我的面吹牛刁卜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曙咽,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛔趴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了例朱?” 一聲冷哼從身側(cè)響起孝情,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洒嗤,沒想到半個月后箫荡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡渔隶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年羔挡,在試婚紗的時候發(fā)現(xiàn)自己被綠了洁奈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绞灼,死狀恐怖利术,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情低矮,我是刑警寧澤印叁,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站军掂,受9級特大地震影響轮蜕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝗锥,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一肠虽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玛追,春花似錦税课、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陆馁,卻和暖如春找颓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叮贩。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工击狮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人益老。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓彪蓬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捺萌。 傳聞我的和親對象是個殘疾皇子档冬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容