Linux YUM、Docker和源码编译详解

 更新时间:2026年06月17日 08:34:32   作者:Full Stack Developme  
本文ginx在Linux系统系统安装方式对比:YUM、DockerD源码编译D三种方式的相同点与不同之处,涵盖环境隔离、灵活性、升级管理等等方面,助你选择最适合的安装方式

Linux 系统上通过 YUM、Docker 和源码编译这三种方式安装软件的相同与不同之处。

为了让对比更清晰,我们以安装 Nginx 这个具体的软件为例。

总结概览

特性维度YUM 安装Docker 容器源码编译安装
核心哲学使用系统包管理器,从官方仓库安装预编译的二进制包。使用容器化技术,运行一个包含应用及其依赖的独立环境。从源代码开始,手动编译生成可执行文件。
易用性极高,一条命令即可完成。高,一条命令拉取并运行。低,步骤繁琐,需手动解决依赖。
依赖管理自动解决,YUM 会自动安装所需依赖。内置隔离,所有依赖已打包在镜像内,与宿主机无关。手动解决,需自行安装所有开发库和工具。
性能原生性能,与系统紧密集成。近原生性能,有极小的开销。最佳性能,可针对当前CPU架构进行优化。
灵活性/定制性低,只能使用仓库提供的版本和模块。中,可以选择不同版本的镜像,但定制需自己构建镜像。极高,可以自定义任何模块和编译选项。
隔离性低,软件安装在系统全局环境,可能产生依赖冲突。极高,应用在隔离的容器中运行,与宿主机和其他容器隔离。低,与 YUM 安装类似,安装在系统全局环境。
文件位置符合 FHS 标准,文件分散在 /usr/bin, /etc, /var/log 等。容器内部分文件系统,通常与镜像定义一致。可挂载外部卷。可自定义(通常为 /usr/local 或自定义路径)。
升级与管理非常方便,yum update 即可平滑升级。非常方便,拉取新镜像并重启容器即可。版本控制极佳。麻烦,需重新编译并手动替换,易出错。
安全性依赖发行版的安全更新和补丁。镜像可能包含漏洞,需定期更新基础镜像。容器本身提供隔离安全性。自己负责所有安全补丁,需跟踪上游更新。
适用场景生产环境首选,追求稳定、简单、易于维护。现代化部署,微服务、CI/CD、环境隔离、快速扩展。特殊需求,需要特定功能、最新版本、或深度性能优化。

详细解析

1. YUM 安装

YUM(或 DNF)是 RHEL/CentOS/Fedora 等发行版的包管理器。

命令示例:

sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

相同点:

  • 与源码编译一样,最终都是在宿主机原生环境中运行一个可执行程序。

  • 与 Docker 一样,都属于“二进制”安装(无需从零开始编译)。

不同点/优缺点:

优点:

  • 极其简单快捷:一条命令完成安装、配置、依赖处理和系统集成。

  • 稳定可靠:仓库中的软件版本都经过发行版维护者的测试,与系统兼容性好。

  • 自动管理:方便的升级、卸载和依赖清理。

缺点:

  • 版本滞后:仓库中的版本通常不是最新的。

  • 定制性差:无法选择编译哪些模块。例如,你想用 --with-http_image_filter_module,但仓库版的 Nginx 没编译这个模块,你就无法使用。

2. Docker 容器

Docker 是一种容器化技术,它并不是在宿主机上直接“安装”软件,而是运行一个包含该软件的独立镜像

命令示例:

# 拉取并运行 Nginx 官方镜像
sudo docker run -d --name my-nginx -p 80:80 nginx:latest

相同点:

  • 最终都能提供一个可用的 Nginx 服务。

不同点/优缺点:

优点:

  • 环境隔离:Nginx 运行在容器里,它的依赖(如 Libc、OpenSSL)与宿主机完全隔离,不会产生冲突。

  • 一致性:在任何支持 Docker 的机器上,运行结果都完全一致(“一次构建,处处运行”)。

  • 快速部署与回滚:秒级启动和停止,版本切换非常简单(只需换一个镜像标签)。

  • 资源高效:相比虚拟机,开销极小。

缺点:

  • 学习曲线:需要理解 Docker 的概念(镜像、容器、卷、网络)。

  • 调试复杂:排查问题需要进入容器内部,或者查看容器日志。

  • 存储与网络:需要额外配置来管理持久化数据和网络端口映射。

3. 源码编译安装

从软件的源代码(通常是 .tar.gz 文件)开始,在自己的机器上编译成可执行文件。

步骤示例:

wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module # 这里可以加很多自定义参数
make
sudo make install
/usr/local/nginx/sbin/nginx

相同点:

  • 与 YUM 安装一样,在宿主机原生运行。

不同点/优缺点:

优点:

  • 极致灵活与定制:可以编译任何你需要的模块,禁用不需要的模块。

  • 最新版本:可以立即用上官方发布的最新版。

  • 性能优化:编译时可以针对当前 CPU 架构进行优化(如指定 -march=native)。

缺点:

  • 过程繁琐:步骤多,耗时长。

  • 依赖管理噩梦:需要手动安装 gccmakepcre-develzlib-developenssl-devel 等开发工具和库。./configure 阶段经常因缺少依赖而报错。

  • 难以管理:没有统一的升级和卸载命令,需要手动操作,容易遗留文件。

如何选择?

绝大多数情况,尤其是生产环境:

  • 优先使用 YUM/DNF/APT。稳定、省心、易于维护是首要考虑因素。

需要环境隔离、快速扩展、微服务架构或CI/CD:

  • 选择 Docker。它是现代应用部署的事实标准。

有非常特殊的定制需求,或需要最新版本,或进行性能研究:

  • 考虑 源码编译。例如,你需要为 Nginx 添加一个第三方模块,或者使用某个还在开发中的新特性。

一个有趣的组合:你甚至可以在 Dockerfile 里使用源码编译的方式来构建一个完全定制的 Nginx 镜像,这样既获得了定制性,又拥有了 Docker 的便携性和隔离性。这正体现了不同技术可以协同工作。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • linux服务器系统中手动配置lamp服务器的经验分享

    linux服务器系统中手动配置lamp服务器的经验分享

    LAMP是Linux、Apache、MySQL、PHP/Perl/Python的简称。它所组成的各组件都是开源软件,因此很方便自由的获取,导致这些组件的广泛使用,并不断完善发展,初步形成新的软件系统格局,并可能成为开源软件系统工程化的核心模式
    2014-05-05
  • linux服务器下添加用户和删除用户的命令

    linux服务器下添加用户和删除用户的命令

    linux服务器下添加用户和删除用户的命令,需要的朋友可以参考下。
    2011-11-11
  • centos中nginx按日期自动分割访问日志的方法

    centos中nginx按日期自动分割访问日志的方法

    本篇文章主要介绍了centos中nginx按日期自动分割访问日志的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • centos7安装部署gitlab服务器的方法

    centos7安装部署gitlab服务器的方法

    这篇文章主要介绍了centos7系统中安装部署gitlab服务器的方法,需要的朋友可以参考下
    2021-07-07
  • Linux下的多线程编程(三)

    Linux下的多线程编程(三)

    学东西,往往实例才是最让人感兴趣的,老是学基础理论,不动手,感觉没有成就感,呵呵。
    2014-08-08
  • linux解压缩 xxx.jar文件进行内部操作过程

    linux解压缩 xxx.jar文件进行内部操作过程

    这篇文章主要介绍了linux解压缩 xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • inotify+rsync实现实时同步的方法

    inotify+rsync实现实时同步的方法

    下面小编就为大家分享一篇inotify+rsync实现实时同步的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Apache Doris的Bitmap索引和BloomFilter索引使用及注意事项

    Apache Doris的Bitmap索引和BloomFilter索引使用及注意事项

    bitmap index是一种位图索引,是一种快速数据结构,能够加快查询速度,BloomFilter索引也是以Block为粒度创建的,这篇文章主要介绍了Apache Doris的Bitmap索引和BloomFilter索引使用,需要的朋友可以参考下
    2022-09-09
  • Linux磁盘空间不足的有效解决方法总结

    Linux磁盘空间不足的有效解决方法总结

    在使用 MySQL 数据库时,开发者和系统管理员可能会遇到各种错误,其中之一便是 sqlalchemy.exc.InternalError,这个错误提示表明,系统在尝试向 /tmp 目录写入文件时,发现没有足够的磁盘空间,所以本文给大家总结Linux磁盘空间不足的有效解决方法,需要的朋友可以参考下
    2024-11-11
  • Ubuntu通过命令行查看系统信息的方法详解

    Ubuntu通过命令行查看系统信息的方法详解

    如何查看 Linux 系统(以 Ubuntu为例)的相关信息?那你来对地方了,在这篇文章里,你会学到如何轻松地找到各种系统相关信息,比如内存大小、GPU、CPU、存储空间、操作系统等,需要的朋友可以参考下
    2025-06-06

最新评论