Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux YUM、Docker和源码编译

Linux YUM、Docker和源码编译详解

作者: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

相同点:

不同点/优缺点:

优点:

缺点:

2. Docker 容器

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

命令示例:

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

相同点:

不同点/优缺点:

优点:

缺点:

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

相同点:

不同点/优缺点:

优点:

缺点:

如何选择?

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

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

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

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

总结

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

您可能感兴趣的文章:
阅读全文