91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Alpine里的go應用

發布時間:2022-01-14 15:27:45 來源:億速云 閱讀:169 作者:柒染 欄目:云計算

小編今天帶大家了解如何分析Alpine里的go應用,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學習“如何分析Alpine里的go應用”的知識吧。

我們剛接觸Docker時,最常見的入門方式是使用Ubuntu或Debian等系統構建虛擬機,這種方式的弊端是產生的鏡像太大了,單單是Ubuntu的基礎鏡像就已經有187.9MB,而且大部分裝好的軟件和依賴庫都不會用到。

如何分析Alpine里的go應用

容器和虛擬機的主要區別在于,容器在宿主系統的一個隔離進程空間里邊運行,因此它不需要有獨立的內核和其他系統文件,只要在上邊安裝你需要使用的東西,我們會需要Python來運行Go的服務嗎?這不是一個很難回答的問題。

微基礎鏡

 首先我們要拋棄使用Ubuntu或者Debian作為基礎鏡像這種思路,我們著眼于更輕量的選擇。

[Alpine Linux]是一個微型的Linux分發版,可以用來構建一個體積只有5M的基容器,它是基于一個嵌入式系統[BusyBox]改造的。那為什么不直接用BusyBox呢?使用Alpine有幾個優點,首先,Alpine上有一個包管理系統<code>apk</code>,使用它可以簡化容器的維護;第二,Alpine的內核已經被打上[PaX補丁],可以免受大量0 day漏洞的侵害。

你可以在以下列表看到,Alpine只在BusyBox的基礎上增加了4.1MB的體積,但是同時相應增加了那些便利,我覺得這部分開銷非常值得。

| 鏡像      | 體積  |
| :-------- | :--: |
| ubuntu  | 187.90 MB   |
| nicholasjackson/microservice-basebox      |  15.82 MB  |
| alpine      | 5.24 MB   |
| busybox      |  1.10 MB  |

為Alpine Linux編譯Go應用


使用Go來構建微服務的一個優點是,它會被編譯成二進制包,這樣的話,它就不需要框架或者運行依賴,這樣非常有利,因為正如前面所說Alpine是一個非常輕量級的分發版,并不是所有C語言依賴庫都有安裝,所以Go的動態庫依賴很可能也沒有。所幸的是有專門的方法去禁用了cgo依賴,可以把應用通過鏈接的方式編譯,我們只需要這樣告訴編譯器去重新構建我們的所有應用包就可以了:
```sh
$ CGO_ENABLED=0 go build -a -installsuffix cgo .
```
我們更詳細說一下上邊這個命令的細節:
CGO_ENABLED=0 是一個編譯標志,會讓構建系統忽略cgo并且靜態鏈接所有依賴;
-a會強制重新編譯,即使所有包都是由最新代碼編譯的;
-installsuffix cgo 會為新編譯的包目錄添加一個后綴,這樣可以把編譯的輸出與默認的路徑分離。

運行應用

那么在二進制包里怎么使用配置文件呢,如果你是在使用微服務架構,那你很可能在使用[Consul],如果還沒有的話,那你真的應該好好研究一下它,它確實很強大。在本文中,我會假定你已經熟悉Consul,你在使用這個[Consul模板]去管理你的配置文件。


我們通常需要使用監護進程來運行這些服務,例如[Supervisor],不過這個工具需要使用Python,這樣有違我們輕量級的初衷,所以我們使用[Skaware S6]。

S6是一個簡單有效的工具,它使用<code>/etc/s6</code>下的配置文件,來啟動s6-svscan進程。你可以從我的[基鏡像倉庫]中看到,這個目錄下包含了一系列的shell腳本。


.S6-svscan


這個目錄包含兩個腳本"crash"和"finish",當s6所管理的應用由于錯誤終結時,crash腳本會被調用,當s6進程關閉時,finish腳本會被調用。


Spp


這個目錄包含"run"和"finish"兩個腳本,run用來啟動主服務,并且會被配置上Go應用的執行路徑。而在finish中可以設置應用程序關閉時要執行的腳本。

Consul-template


這個目錄同樣也是包含了那兩個腳本,但是這次它是用來配置consul-template應用的,consul-template生成微服務所用到的配置文件,相關配置文件會被儲存在Consul服務端上,在Go微服務的整個生命周期中,Consul應用都需要運行著提供配置服務,所以我們也要通過s6來監控守護它。

Docker基礎鏡像

為了方便測試,我已經使用Alpine來構建了一個帶有Skaware S6和Consul Template的鏡像,這個[新的鏡像]也是只有15.82MB。即使你基于這個鏡像構建一個再臃腫的應用,那也估計不過30MB左右,但是這樣還是只有一個Ubuntu基礎鏡像體積的13%。

感謝大家的閱讀,以上就是“如何分析Alpine里的go應用”的全部內容了,學會的朋友趕緊操作起來吧。相信億速云小編一定會給大家帶來更優質的文章。謝謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新源县| 丽水市| 卓资县| 勐海县| 巩留县| 洛南县| 平舆县| 图们市| 天台县| 新营市| 金沙县| 枞阳县| 玉龙| 荣成市| 中卫市| 南岸区| 高平市| 邹平县| 江永县| 剑川县| 大竹县| 米泉市| 灵丘县| 宁晋县| 昌图县| 铁岭市| 晋中市| 敦煌市| 大足县| 绩溪县| 承德县| 子洲县| 资源县| 张家港市| 高密市| 东莞市| 东乌珠穆沁旗| 灌南县| 仪征市| 德阳市| 页游|