如何 Docker 化编译的软件
创始人
2024-03-01 21:54:35
0

我最近在 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中国 荣誉推出

相关内容

摩尔线程正式开源TileL...
据摩尔线程官微2月10日消息,近日,摩尔线程-U(688795.S...
2026-02-10 21:19:24
makefile基础与实战...
编译技术作为连接高级语言与机器执行的桥梁,其学习路径需要理论深度与...
2026-01-15 11:19:16
makefile基础与实战...
在软件工程实践中,C/C++ 因其高性能和底层控制能力,长期被用于...
2025-12-25 16:46:57
开源鸿蒙技术大会 2025...
IT之家 8 月 28 日消息,开源鸿蒙技术大会 2025 官宣将...
2025-08-28 18:44:41
华为仓颉编程语言首个 LT...
IT之家 7 月 1 日消息,华为仓颉编程语言首个 LTS 版本 ...
2025-07-01 21:12:49
在CentOS系统中为Do...
理解Docker存储的核心机制:驱动与分层管理 在CentOS系统...
2025-06-16 07:41:58

热门资讯

2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
KDE4.11 Beta1 正...   KDE 项目工作组刚刚发布了 KDE Software Compilation 4.11 Bet...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
使用时间序列数据,用开源工具助... InfluxData 是一个开源的时间序列数据库平台。下面介绍了它是如何被用于边缘应用案例的。收集到...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Textual:为 Pytho... 快速入门使用 TextualPython 在 Linux 上有像 TkInter 这样的优秀 GUI...
硬核观察 #1245 Open... #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令在 1 月 10 日...