新聞中心
將應(yīng)用程序遷移到容器的五個(gè)步驟
作者:LCTT Xingyu.Wa譯 2022-02-15 09:36:13
云計(jì)算
云原生 如果你是容器的新手,不要被那些術(shù)語所嚇倒。這些關(guān)鍵原則將幫助你把應(yīng)用遷移到云中。

創(chuàng)新互聯(lián)專注于江安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供江安營銷型網(wǎng)站建設(shè),江安網(wǎng)站制作、江安網(wǎng)頁設(shè)計(jì)、江安網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造江安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供江安網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
一般來說,人們想使用你的應(yīng)用程序這是一件好事。然而,當(dāng)應(yīng)用程序在服務(wù)器上運(yùn)行時(shí),應(yīng)用程序受歡迎是有代價(jià)的。隨著用戶對資源需求的增加,在某些時(shí)候,你可能會(huì)發(fā)現(xiàn)你需要擴(kuò)展你的應(yīng)用程序。一種選擇是在這種情況下增加更多的服務(wù)器,建立一個(gè)像 Nginx 這樣的 負(fù)載平衡器,以滿足需求。
但是,這種方法的成本可能很昂貴,因?yàn)楫?dāng)需求低的時(shí)候,在沒有流量的服務(wù)器上運(yùn)行你的應(yīng)用程序的實(shí)例并不會(huì)節(jié)省資源。容器的優(yōu)點(diǎn)是它是非持久的,在有需求時(shí)啟動(dòng)新實(shí)例,而隨著需求的減少逐漸消失。如果這聽起來像是你需要的功能,那么現(xiàn)在可能是將你的應(yīng)用程序遷移到容器的時(shí)候了。
將應(yīng)用程序遷移到容器中,很快就會(huì)變得迷失方向。雖然容器內(nèi)的環(huán)境可能感覺很熟悉,但許多容器鏡像是最小化的,而且它們被設(shè)計(jì)為無狀態(tài)的。不過在某種程度上,這也是容器的優(yōu)勢之一。就像 Python 虛擬環(huán)境一樣,它是一塊白板,可以讓你構(gòu)建(或重建)你的應(yīng)用程序,而沒有許多其他環(huán)境所提供的無形的默認(rèn)值。
每一次向云服務(wù)的遷移都是獨(dú)一無二的,但在將你的應(yīng)用程序移植到容器之前,你應(yīng)該注意以下幾個(gè)重要原則。
1. 理解你的依賴關(guān)系
將你的應(yīng)用程序移植到容器中是一個(gè)很好的機(jī)會(huì),可以了解你的應(yīng)用程序?qū)嶋H依賴的東西。由于除了最基本的系統(tǒng)組件外,很少有默認(rèn)安裝的組件,你的應(yīng)用程序一開始不太可能在容器中運(yùn)行。
在重構(gòu)之前,確定你的依賴關(guān)系。首先,在你的源代碼中用 grep 查找 include、import、require、use 或你選擇的語言中用來聲明依賴關(guān)系的任何關(guān)鍵詞。
$ find ~/Code/myproject -type f \
-iname ".java" \
-exec grep import {} \;
不過,僅僅識(shí)別你使用的特定語言的庫可能是不夠的。審計(jì)依賴關(guān)系,這樣你就能知道是否有語言本身運(yùn)行所需的低級(jí)庫,或者特定的模塊以預(yù)期的功能運(yùn)行。
2. 評(píng)估你的數(shù)據(jù)存儲(chǔ)
容器是無狀態(tài)的,當(dāng)一個(gè)容器崩潰或停止運(yùn)行時(shí),該容器的實(shí)例就永遠(yuǎn)消失了。如果你要在該容器中保存數(shù)據(jù),這些數(shù)據(jù)也會(huì)消失。如果你的應(yīng)用程序存儲(chǔ)用戶數(shù)據(jù),所有的存儲(chǔ)必須發(fā)生在容器之外,在你的應(yīng)用程序的實(shí)例可以訪問的某個(gè)位置。
你可以使用映射到容器內(nèi)某個(gè)位置的本地存儲(chǔ)來存儲(chǔ)簡單的應(yīng)用程序配置文件。這是一種常見的技術(shù),適用于需要管理員提供簡單配置值的 Web 應(yīng)用程序,如管理員的電子郵件地址、網(wǎng)站標(biāo)題等。比如說:
$ podman run \
--volume /local/data:/storage:Z \
mycontainer
然而,你可以配置一個(gè)數(shù)據(jù)庫,如 MariaDB 或 PostgreSQL,將大量數(shù)據(jù)在幾個(gè)容器中的共享存儲(chǔ)。對于私人信息,如密碼,你可以配置一個(gè)機(jī)密存儲(chǔ)。
對于你需要如何重構(gòu)你的代碼,相應(yīng)地調(diào)整存儲(chǔ)位置,這可能意味著改變路徑到新的容器存儲(chǔ)映射,移植到不同的數(shù)據(jù)庫,甚至是納入容器特定的模塊。
3. 準(zhǔn)備好你的 Git 倉庫
容器在構(gòu)建時(shí)通常會(huì)從 Git 倉庫中拉取源代碼。一旦你的 Git 倉庫成為你的應(yīng)用程序的生產(chǎn)就緒代碼的標(biāo)準(zhǔn)來源,你必須有一個(gè)管理 Git 倉庫的計(jì)劃。要有一個(gè)發(fā)布分支或生產(chǎn)分支,并考慮使用 Git 鉤子 來拒絕意外的未經(jīng)批準(zhǔn)的提交。
4. 了解你的構(gòu)建系統(tǒng)
容器化應(yīng)用程序可能沒有傳統(tǒng)的發(fā)布周期。當(dāng)容器被構(gòu)建時(shí),它們會(huì)被從 Git 中拉取出來。你可以啟動(dòng)任何數(shù)量的構(gòu)建系統(tǒng)作為容器構(gòu)建的一部分,但這可能意味著調(diào)整你的構(gòu)建系統(tǒng),使其比過去更加自動(dòng)化。你應(yīng)該重構(gòu)你的構(gòu)建過程,使你完全有信心它能在無人值守的情況下工作。
5. 構(gòu)建鏡像
構(gòu)建鏡像不一定是復(fù)雜的任務(wù)。你可以使用 現(xiàn)有的容器鏡像 作為基礎(chǔ),用一個(gè)簡單的 Docker 文件對其進(jìn)行調(diào)整。另外,你也可以使用 Buildah 從頭開始構(gòu)建你自己的鏡像。
在某種程度上,構(gòu)建容器的過程與實(shí)際重構(gòu)代碼一樣,都是開發(fā)的一部分。容器的構(gòu)建是為了獲取、組裝和執(zhí)行你的應(yīng)用程序,所以這個(gè)過程必須是自動(dòng)化的、健壯的。建立一個(gè)好的鏡像,你就為你的應(yīng)用程序建立了一個(gè)堅(jiān)實(shí)可靠的基礎(chǔ)。
容器化
如果你是容器的新手,不要被術(shù)語所嚇倒。容器只是另一種環(huán)境。容器化開發(fā)的感知約束實(shí)際上可以幫助你專注于你的應(yīng)用程序,并更好地了解它是如何運(yùn)行的、它需要什么才能可靠地運(yùn)行,以及當(dāng)出錯(cuò)時(shí)有哪些潛在的風(fēng)險(xiǎn)。相反,這導(dǎo)致系統(tǒng)管理員在安裝和運(yùn)行你的應(yīng)用程序時(shí)受到的限制要少得多,因?yàn)閺谋举|(zhì)上講,容器是一個(gè)受控的環(huán)境。仔細(xì)審查你的代碼,了解你的應(yīng)用程序需要什么,并相應(yīng)地重構(gòu)它。
本文名稱:將應(yīng)用程序遷移到容器的五個(gè)步驟
URL網(wǎng)址:http://www.5511xx.com/article/ccedcsd.html


咨詢
建站咨詢
