摘要:是一套工具包和工作流程,用于從源代碼構(gòu)建重復性鏡像。由上圖可以看出,方式的構(gòu)建過程比較直接根據(jù)定義的步驟,讀取源代碼,生成鏡像成品。源代碼相關編譯源代碼部署二進制程序定義服務啟動方式等。
前言
寫Dockerfile是構(gòu)建Docker鏡像最通常的方式,接觸過Docker的童鞋多少了解一些。前段時間研究OpenShift(paas的一種),發(fā)現(xiàn)了另外一種構(gòu)建Docker鏡像的方式:S2I。
S2I介紹S2I是Source-to-Image的縮寫。
S2I是一套工具包和工作流程,用于從源代碼構(gòu)建重復性Docker鏡像。
S2I是一個框架,它使寫鏡像變得簡單。它把程序源代碼作為輸入,生成一個運行已組裝應用程序的新鏡像并作為輸出。
S2I的詳細介紹以及使用方法可以參考以下官方文檔。本文就不復述(fan yi)了。
Source-To-Image (S2I)
S2I Requirements
How to Create an S2I Builder Image
兩種構(gòu)建方式的過程Talk is Cheap, Show me the Picture.
先上圖。
源代碼只是構(gòu)建鏡像的多種輸入的一種,還有二進制文件等其它輸入。鏡像構(gòu)建的過程也比較復雜。下圖是為了清晰地進行對比,所以畫得簡單一些。
由上圖可以看出,Dockerfile方式的構(gòu)建過程比較直接:
根據(jù)Dockerfile定義的步驟,讀取源代碼,生成鏡像(成品)。
而S2I方式的構(gòu)建過程比較“曲折”:
根據(jù)Dockerfile定義的步驟,準備鏡像環(huán)境、讀取S2I腳本,構(gòu)建鏡像(中間)<又稱構(gòu)建器鏡像 Builder Image>。
基于上一步生成的鏡像(中間),讀取源代碼,根據(jù)S2I腳本定義的步驟編譯源代碼、部署二進制程序、預備服務啟動,構(gòu)建鏡像(成品)。
從上述過程可以看出,S2I方式比Dockerfile方式多了一步,多了兩樣東西:S2I腳本和鏡像(中間)。
S2I腳本介紹S2I腳本有4種。
assemble: 負責構(gòu)建程序,即編譯、部署程序。
run: 負責啟動應用。
save-artifacts: 負責增量構(gòu)建(鏡像),目前尚未使用。
usage: 負責打印構(gòu)建器鏡像的使用說明。
S2I方式的好處關于引入S2I構(gòu)建鏡像的好處,書面類的描述可以參考官方文檔,這里談談實踐下來個人的感受和理解。
首先,要了解為什么要引入S2I。
如果一定要把構(gòu)建鏡像分為兩部分,可以分為
環(huán)境準備
定義基礎鏡像;
安裝所需部件,如Maven、Java JDK;
拷貝/移動文件/目錄;
定義用戶;
暴露端口等。
源代碼相關
編譯源代碼;
部署二進制程序;
定義服務啟動方式等。
引入S2I的目的就是為了分離這兩部分的工作。
其中環(huán)境準備工作交給了構(gòu)建器鏡像,
構(gòu)建器鏡像一旦生成將保持不變,可理解為靜態(tài)部分。
而源代碼相關工作交給了S2I腳本。
在構(gòu)建鏡像(成品)過程中,S2I將根據(jù)S2I腳本定義的步驟進行源代碼編譯、二進制程序部署、服務啟動預備,可以理解為動態(tài)部分。
這樣的分離帶來了如下好處。
對于環(huán)境依賴相近、構(gòu)建部署啟動過程相似的程序,由于有構(gòu)建器鏡像的存在,構(gòu)建過程不需要再次進行環(huán)境準備工作,從而節(jié)省了構(gòu)建鏡像(成品)的時間。
分工明確。構(gòu)建工作的分離允許應用程序開發(fā)人員對他們的代碼進行更改,而不用知道Dockerfile或Docker鏡像的細節(jié)。如果鏡像構(gòu)建交付給S2I或PaaS(platform as a service)平臺,開發(fā)工程師不需要理解Docker來對項目作出貢獻。這在一個由很多人組成的企業(yè)環(huán)境中是非常有用的,這些人都有不同的專業(yè)方向,而且并不直接涉及到他們項目的構(gòu)建過程。
(注) 上述好處2引用了文章:使用Source-to-image(S2I)構(gòu)建鏡像的描述
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27182.html
摘要:自定義鏡像部分自定義鏡像部分安裝工具安裝工具工具官方下載工具解壓工具到查看版本初始化目錄結(jié)構(gòu)初始化目錄結(jié)構(gòu)筆者是在目錄下開始操作的,提前說下免得讀者操作有誤。修改修改腳本只作啟動功能,為了方便傳調(diào)優(yōu)參數(shù),定制了環(huán)境變量供使用。 本文目標 由于 OpenShift 官方提供的鏡像與模板(OpenJDK8)不完全滿足業(yè)務需要: 不包含飛行記錄功能。只有 OpenJD...
摘要:第二具備輕量化特性容器的體積非常小巧。他們大多認為自己應該將應用程序部署至當前正在運行的容器當中。不要創(chuàng)建大型鏡像體積過大的鏡像會加大其發(fā)布難度??傮w來講,在向生產(chǎn)環(huán)境中部署容器時,必須避免使用最新標簽。 當下最火爆的Docker,是一個開源的應用容器引擎。大家已經(jīng)開始認同并接受容器技術,并意識到它能夠解決多種現(xiàn)實問題并具備一系列無可比擬的優(yōu)勢。今天小數(shù)就和大家聊一聊容器技術的優(yōu)勢和誤...
摘要:鑒于這一特征,用戶必須轉(zhuǎn)變他們使用以及管理容器時的心態(tài)。不要將應用分開發(fā)布有些人會將容器視為虛擬機,他們中的大部分人認為,應該在現(xiàn)有的運行容器中部署應用。不要以用戶運行進程默認情況下,容器以權限運行。 【編者按】本文作者為 Rafael Benevides,主要介紹使用 Docker 容器時應該注意的十個陷阱。文章系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn),以下為正文。 sho...
摘要:分鐘快速入門教程一歡迎來到世界與虛擬化在沒有的時代,我們會使用硬件虛擬化虛擬機以提供隔離。倉庫分為公開倉庫和私有倉庫,最大的公開倉庫是官方倉庫,國內(nèi)的公開倉庫也有很多選擇,例如阿里云等。 30 分鐘快速入門 Docker 教程 一、歡迎來到 Docker 世界 1. Docker 與虛擬化 在沒有 Docker 的時代,我們會使用硬件虛擬化(虛擬機)以提供隔離。這里,虛擬機通過在操作系...
摘要:在前一篇文章學習與和應用一初步認識中,我們初步介紹了解決了什么問題,容器化技術與傳統(tǒng)的虛擬化方式的區(qū)別,以及簡要介紹了的幾大核心概念鏡像容器和倉庫。針對上述問題,提供了的,通過使用指令配置的方式來創(chuàng)建鏡像。 在前一篇文章 Docker學習與和應用(一)_初步認識中,我們初步介紹了Docker解決了什么問題,Docker容器化技術與傳統(tǒng)的虛擬化方式的區(qū)別,以及簡要介紹了Docker的幾大...
閱讀 1254·2023-04-25 18:57
閱讀 2141·2023-04-25 16:28
閱讀 3946·2021-11-24 09:39
閱讀 3640·2021-11-16 11:45
閱讀 1830·2021-10-13 09:40
閱讀 1271·2019-08-30 15:52
閱讀 1724·2019-08-30 10:57
閱讀 669·2019-08-29 16:55