久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何分析Alpine里的go應用

157次閱讀
沒有評論

共計 2038 個字符,預計需要花費 6 分鐘才能閱讀完成。

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

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

容器和虛擬機的主要區別在于,容器在宿主系統的一個隔離進程空間里邊運行,因此它不需要有獨立的內核和其他系統文件,只要在上邊安裝你需要使用的東西,我們會需要 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 應用”的全部內容了,學會的朋友趕緊操作起來吧。相信丸趣 TV 丸趣 TV 小編一定會給大家帶來更優質的文章。謝謝大家對丸趣 TV 網站的支持!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計2038字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 武冈市| 平凉市| 和田市| 乐至县| 五华县| 营口市| 买车| 韩城市| 宁乡县| 玉林市| 海林市| 岫岩| 巩义市| 星座| 溧阳市| 长武县| 满城县| 铜山县| 偃师市| 武汉市| 拜城县| 休宁县| 扶沟县| 威信县| 红河县| 北京市| 承德县| 英超| 麦盖提县| 古交市| 积石山| 那曲县| 临沧市| 仪征市| 吉木萨尔县| 大埔县| 衢州市| 石泉县| 鱼台县| 大同市| 石棉县|