如何 Docker 化編譯的軟體
我最近在 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-1
的 debian/control
文件)以及/或者 makedepends
(如 php7
的 APKBUILD
文件)用於包名線索。
就我個人而言,我覺得這種偵探工作很有趣,也很有收穫,但我意識到我可能是一個獨特的生物。我偶爾使用的另一個技術是看是否有人已經 Docker 化了我想要的東西,這樣我可以直接從他們的 Dockerfile
中知道我需要安裝的東西。
對於特定的 PHP 擴展,幾乎總是有人已經想出對於這個或那個模塊需要的依賴,而我所要做的就是做一些輕量的工作找出它們。
不管怎樣,這就是我的方法!希望這個有幫助,玩得愉快!
via: https://tianon.github.io/post/2017/12/26/dockerize-compiled-software.html
作者:Tianon Gravi 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive