歡迎光臨
每天分享高質量文章

如何 Docker 化編譯的軟體 | Linux 中國

我寫了一個中等篇幅的評論解釋了我如何用常規的方式為我想要的軟體進行 Docker 化的。
— Tianon Gravi


編譯自 | https://tianon.github.io/post/2017/12/26/dockerize-compiled-software.html 
 作者 | Tianon Gravi
 譯者 | geekpi

我最近在 docker-library/php[1] 倉庫中關閉了大量問題,最老的(並且是最長的)討論之一是關於安裝編譯擴展的依賴關係,我寫了一個中等篇幅的評論[2]解釋了我如何用常規的方式為我想要的軟體進行 Docker 化的。

我要在這裡複製大部分的評論內容,或許擴展一點點,以便有一個更好的/更乾凈的鏈接!

我第一步是編寫 Dockerfile 的原始版本:下載原始碼,運行 ./configure && make等,清理。然後我嘗試構建我的原始版本,並希望在這過程中看到錯誤訊息。(對,真的!)

錯誤信息通常以 error: could not find "xyz.h" 或 error: libxyz development essay-headers not found 的形式出現。

如果我在 Debian 中構建,我會輸入 https://packages.debian.org/file:xyz.h(用錯誤信息中頭檔案的名稱替換 “xyz.h”),或者在谷歌中搜索像 “xyz.h debian” 這樣的東西,找出我需要的包的名稱。

如果我在 Alpine 中構建,我將使用 https://pkgs.alpinelinux.org/contents 進行類似的搜索。

“libxyz development essay-headers” 在某種程度上也是一樣的,但是根據我的經驗,對於這些用 Google 對開發者來說效果更好,因為不同的發行版和專案會以不同的名字來呼叫這些開發包,所以有時候更難確切的知道哪一個是“正確”的。

當我得到包名後,我將這個包名稱添加到我的 Dockerfile 中,清理之後,然後重覆操作。最終通常會構建成功。偶爾我發現某些庫不在 Debian 或 Alpine 中,或者是不夠新的,由此我必須從原始碼構建它,但這些情況在我的經驗中很少見 —— 因人而異。

我還會經常查看 Debian(通過 https://sources.debian.org)或 Alpine(通過 https://git.alpinelinux.org/cgit/aports/tree)我要編譯的軟體包原始碼,特別關註 Build-Depends(如 php7.0=7.0.26-1 的 debian/control 檔案[6])以及/或者 makedepends (如 php7 的 APKBUILD 檔案[7])用於包名線索。

就我個人而言,我覺得這種偵探工作很有趣,也很有收穫,但我意識到我可能是一個獨特的生物。我偶爾使用的另一個技術是看是否有人已經 Docker 化了我想要的東西,這樣我可以直接從他們的 Dockerfile 中知道我需要安裝的東西。

對於特定的 PHP 擴展,幾乎總是有人已經想出對於這個或那個模塊需要的依賴,而我所要做的就是做一些輕量的工作找出它們。

不管怎樣,這就是我的方法!希望這個有幫助,玩得愉快!


via: https://tianon.github.io/post/2017/12/26/dockerize-compiled-software.html

作者:Tianon Gravi[9] 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

geekpi ? ?
共計翻譯:654 篇
貢獻時間:1569 天


推薦文章

< 左右滑動查看相關文章 >

點擊圖片、輸入文章 ID 或識別二維碼直達

赞(0)

分享創造快樂