摘要:容器在基礎設施即代碼中有什么意義一句話概括的話,容器意味著一切。正是為了應對這一挑戰,基礎設施即代碼作為一個解決方案便誕生了。這是基礎設施即代碼最簡單的形式。
容器在“基礎設施即代碼(Infrastructure as Code)”中有什么意義?
一句話概括的話,容器意味著一切。
為什么這么說呢?當你在比較單體應用和微服務時,一定會有一些權衡和取舍。一方面,從單體模型轉移到微服務模型,能夠將進程分離成獨立的工作單元。這使得開發者們可以將注意力放在單一功能上,并且有助于測試和擴展。另一方面,由于將所有的東西都分成了多帶帶的服務,過去你只需管理一個單一部署單元的基礎設施,現在你卻必須管理每一個服務的基礎設施。正是為了應對這一挑戰,“基礎設施即代碼”作為一個解決方案便誕生了。
容器技術已經存在一段時間了,它以不同的形式實現且已取得不同程度的成功。這項技術從上世紀80年代初的chroot開始,并在之后帶來了如Virtuozzo和Sysjail這樣形式的產品。直到2013年Docker的誕生和其后的迅猛發展,一切才化零為整,才真正開始深刻影響了應用程序在容器模型中的開發、測試和部署。
“基礎設施即代碼”的實踐,和Docker容器一起,象征著一個最具顛覆性和創新性的改變,它影響了我們今天開發和發布軟件的過程。
什么是“基礎設施即代碼”(IaC)?在深入探討IaC及它和容器的關系之前,先看看IaC的具體含義吧。IaC指的是開發應用程序本身的同時,對硬件和操作系統需求的供應編寫腳本的實踐。通常,管理這些腳本的方式和軟件代碼庫類似,包括版本控制和自動化測試。
當正確執行時,腳本將代替管理員登陸新機器并進行配置。這些腳本描述了新機器的理想狀態,并會執行必要的步驟來配置機器,以實現這一狀態。
“基礎設施即代碼”帶來的核心便利IaC旨在利用系統配置來緩解最常見的痛點,特別是以前配置一個新環境通常需要花費大量的時間。每一個環境都需要多帶帶配置,且如果某處出現錯誤,通常需重新進行整個過程。IaC消除了這些痛點,并向開發者和運維人員提供了以下額外的便利:
重新使用常見的腳本變得相對簡單了。
整個供應過程可實現自動化,連供應硬件都可以作為持續交付過程的一部分。
版本控制,可以根據需要測試和回滾較新的配置。
同行審查和腳本強化。不需手動地從文檔或內存中配置,就可以對腳本進行審查、更新和持續改進。
文檔是自動的,因為本質上它就是腳本本身。
過程可以被測試。
容器,將“基礎設施即代碼”帶向新高度作為開發者,我想我們都遇到過諸如“我不知道啊,反正它在我的機器上工作!”這樣的情況。往好處說,這是一種詼諧有趣的說法;但往壞處說,它代表了我們每天都要處理的一個很大的問題。Docker這一革新性的技術不僅有效消除了開發者的這些擔憂,它還使得IaC在開發過程中成為一個核心組件。
為了更好地說明這一點,讓我們想象一個已經Docker化的Web應用,它有簡單的UI界面。該應用將有一個類似于如下所示的Dockerfile,具體說明了包含該應用的容器的配置信息。
FROM ubuntu:12.04 # Install dependencies RUN apt-get update -y && apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql # Install app RUN rm -rf /var/www/* ADD src /var/www # Configure apache RUN a2enmod rewrite RUN chown -R www-data:www-data /var/www ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
如果你熟悉Docker,這是一個相當典型和簡單的Dockerfile,你應該已經知道了它是什么。如果你不熟悉Dockerfile,那么可以理解為,這個文件將用于創建一個Docker鏡像,它本質上是一個用來創建容器的模板。Docker容器創建完畢后,鏡像將用于構建容器,于是一個自包含的應用程序就這么產生了。從開發工作站到高可用云集群,它可以在已經將其實例化的任何機器上使用。
我們看一下文件中的幾個關鍵參數,并看看它們在過程中實現了什么:
FROM ubuntu:12.04
這一行是從Docker Hub中拉取一個Ubuntu Docker鏡像,作為新容器的基礎。Docker Hub是主要的Docker鏡像在線倉庫。如果你訪問Docker Hub并在其中搜索這個鏡像,你就能找到Ubuntu鏡像倉庫了。這是一個官方鏡像,是由Docker支持的專門團隊負責管理的。使用該鏡像的好處是,當你的底層技術出現問題時,很有可能已經有人開發出了修復補丁并實現了它,并且你所需要做的只是更新你的Dockerfile到新版本,重建你的鏡像,并再一次測試和部署你的容器。
Dockerfile中剩下的幾行將使用apt-get在基礎鏡像上安裝各種軟件包。將應用程序的源添加到/var/www目錄,配置Apache,然后將容器的公開端口設置為端口80。
最后,當容器搭建好后運行CMD指令,這將初始化Apache服務器,打開它以接收http請求。
這是“基礎設施即代碼”最簡單的形式。這就是它的全部。
此時,假如你已經在工作站上安裝并運行Docker了,你可以從Dockerfile所在的目錄中執行以下指令:
$ docker build -t my_demo_application:v0.1
Docker將為你構建鏡像,將其命名為my_demo_application并加標簽v0.1,v0.1實際是一個版本編號。鏡像創建后,您可以使用以下命令獲取該鏡像,并使用該鏡像創建容器。
$ docker run -d my_demo_application:v0.1
就像這樣,你就可以在本地機器上運行你的應用程序,或者在你選擇的任何硬件上運行它。
結語一份簡單的Dockerfile,可以檢查你的源代碼,指定應用程序的環境、配置和訪問路徑,這就是Docker和“基礎設施即代碼”的最簡單形式。同時你可以使用docker compose來定義多層次服務的組合應用,每個服務都包含一個獨立的Dockerfile或者導入Docker倉庫的一個鏡像。你還可以使用docker compose的增強版本rancher compose,這是微服務部署利器,可以讓我們更加便利得玩轉rolling upgrade等高級特性。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26816.html
摘要:原文基礎設施即代碼是一種像其他軟件系統一樣通過源代碼定義計算資源和網絡基礎設施的方法。當變更基礎設施時頻率能減少難度。基礎設施即代碼技術可以用來管理大集群服務器,無論是配置服務器和處理它們如何進行交互。 原文https://martinfowler.com/blik... 基礎設施即代碼是一種像其他軟件系統一樣通過源代碼定義計算資源和網絡基礎設施的方法。代碼可以被用來進行評審和反復構建...
摘要:是谷歌內部為解決這個問題所做的工作的產物,它為管理容器如何在整個集群中運行提供了一個單一的框架。在云中使用服務在許多云中作為標準問題項提供,盡管它在谷歌云平臺,中最突出地表現為本地特性。使用,運行控制平面,將重點部署將用于所需配置的容器。每一項創新都會帶來新的復雜性。容器使以一種方便的、可移植的形式打包和運行應用程序成為可能,但至少要說以規模管理容器是一個挑戰。Kubernetes是谷歌內部...
摘要:企業將業務遷移到云平臺的最大好處之一是可以降低工作和運營成本,其中一個最重要的因素是云計算基礎設施的自動化和配置。幸運的是,有許多云計算基礎設施自動化工具可用于幫助加快流程。企業需要深入了解將工作負載遷移到公共云的正確步驟,并因此降低成本。云遷移不會自行發生,在遷移項目成功之前并不能完成工作和任務。企業將業務遷移到云平臺的最大好處之一是可以降低工作和運營成本,其中一個最重要的因素是云計算基礎...
摘要:企業將業務遷移到云平臺的最大好處之一是可以降低工作和運營成本,其中一個最重要的因素是云計算基礎設施的自動化和配置。幸運的是,有許多云計算基礎設施自動化工具可用于幫助加快流程。企業需要深入了解將工作負載遷移到公共云的正確步驟,并因此降低成本。云遷移不會自行發生,在遷移項目成功之前并不能完成工作和任務。企業將業務遷移到云平臺的最大好處之一是可以降低工作和運營成本,其中一個最重要的因素是云計算基礎...
摘要:正如混合云這一術語所暗示的那樣,云計算現在需要混合的人工技能。混合云目前在企業中的知名度很高,因此該領域的專業人士應具備強大的溝通能力,以便能夠解釋混合云的商業價值和任何因遷移到混合云而帶來的流程改進環境。隨著混合云的普及,企業對IT專業人員的需求也在不斷增長,他們可以有效地設計、實施和優化這種現代計算方法。正如混合云這一術語所暗示的那樣,云計算現在需要混合的人工技能。如果IT專業人員從來沒...
閱讀 3510·2023-04-25 15:52
閱讀 583·2021-11-19 09:40
閱讀 2588·2021-09-26 09:47
閱讀 1028·2021-09-22 15:17
閱讀 3554·2021-08-13 13:25
閱讀 2219·2019-08-30 15:56
閱讀 3467·2019-08-30 13:56
閱讀 2101·2019-08-30 11:27