作者 | 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中國 榮譽推出