如何 Docker 化編譯的軟體

Tianon Gravi發表於2018-02-21
作者: Tianon Gravi 譯者: LCTT geekpi

| 2018-02-21 12:12      

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

我要在這裡複製大部分的評論內容,或許擴充套件一點點,以便有一個更好的/更乾淨的連結!

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

錯誤資訊通常以 error: could not find "xyz.h"error: libxyz development headers not found 的形式出現。

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

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

“libxyz development 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-1debian/control 檔案)以及/或者 makedepends (如 php7APKBUILD 檔案)用於包名線索。

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

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

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


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

作者:Tianon Gravi 譯者:geekpi 校對:wxy

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

如何 Docker 化編譯的軟體

相關文章