Linux运维入门实战:从系统安装到Docker部署的完整学习路径

发布时间:2026/7/25 23:36:55
Linux运维入门实战:从系统安装到Docker部署的完整学习路径 1. 从零到能干活Linux运维到底要学什么很多人想转行或者提升技能看到“Linux运维”这个词第一反应是命令太多、概念太杂不知道从哪里下手。网上的资料要么太散要么一上来就讲高深架构对新手极不友好。这篇文章的目的就是帮你把“从小白到能干活”这条路径上的关键节点和实操细节拆解清楚。所谓“能干活”不是让你立刻去设计千万级并发架构而是指你能独立完成几件核心事情在一台新服务器上把Linux系统装好、能用命令行完成基本的文件管理和系统操作、能配置网络让服务器被访问、能安装和维护常见的应用比如Web服务、数据库并且初步了解如何使用Docker这样的现代技术来封装和部署应用。如果你能把这些流程走通并且理解每一步在做什么那么你不仅具备了入门运维的资格也建立起了后续深入学习所有“高阶技术”的坚实基础。整个学习过程我会建议按“安装系统 - 掌握核心命令 - 理解文件与权限 - 配置网络与服务 - 使用Docker”这个顺序来。这个顺序是经过验证的它模拟了一个真实的服务器上线流程先有机器和系统然后你去操作它接着配置它对外提供服务最后用更高效的方式管理应用。跳过任何一环后面的学习都会感到吃力。下面我们就从最开始的“安装Linux”说起。2. 第一步搞定Linux安装选对系统比瞎折腾更重要对于零基础新手安装Linux是第一个实操门槛也是最容易放弃的地方。很多人卡在镜像下载、启动盘制作或者分区界面。我的建议是不要追求最新、最炫的发行版选择一个社区支持强大、文档丰富、且对新手友好的版本。对于绝大多数国内学习者和企业初期使用场景CentOS Stream 或 Ubuntu LTS 是更稳妥的起点。CentOS系列包括Rocky Linux, AlmaLinux继承了Red Hat的基因在企业服务器市场占有率极高Ubuntu则以其易用性和庞大的社区资源著称。2.1 安装前的核心准备镜像、工具与虚拟机在你真正往物理机上安装之前强烈建议先在虚拟机里完成全部练习。这能让你大胆尝试包括把系统“搞崩”而无需担心数据丢失。你需要准备三样东西Linux系统镜像ISO文件去官网下载。例如Ubuntu就去ubuntu.comCentOS Stream就去centos.org。选择LTS长期支持版本比如Ubuntu 22.04 LTS。虚拟机软件个人学习首推VirtualBox免费、开源、跨平台。如果你习惯用VMware Workstation Player个人使用免费也可以。在Windows或macOS上安装好这类软件。一个至少20GB的可用磁盘空间用于存放虚拟机的硬盘文件。安装过程本身图形化安装向导已经非常人性化。但有几个关键选择点需要你理解语言和键盘建议安装界面语言选英语English这能避免后续一些终端显示乱码的问题。系统语言可以在安装后设置为中文。安装类型对于新手在虚拟机上直接选择“Erase disk and install...”清除磁盘并安装是最简单的。它会在虚拟硬盘上自动完成分区。分区手动选项如果你好奇或想练习可以选“Something else”手动分区。对于一个简单的学习环境我建议的最小分区方案是/boot 1GB 存放系统启动文件。swap 内存大小的1-2倍例如内存2GBswap给4GB 充当“虚拟内存”。/ 剩余所有空间 这是系统的根目录。用户设置这里会要求你设置一个root用户密码和创建一个普通用户。务必记住你设置的密码。创建一个普通用户如yourname并为其设置密码日常操作应使用普通用户需要高权限时再切换。软件选择在Ubuntu安装时你可以勾选“Install OpenSSH server”这样安装完就自带SSH服务方便后续用其他电脑远程连接。其他保持默认即可。安装完成后重启用你创建的普通用户登录。恭喜你的第一台Linux服务器虽然是虚拟的已经就绪。2.2 安装后的首要三件事更新、网络与远程连接系统装好不是结束而是开始。登录后第一件事打开终端Terminal做下面三件事更新系统软件包这能确保你的系统拥有最新的安全补丁和软件版本。# 对于Ubuntu/Debian系 sudo apt update sudo apt upgrade -y # 对于CentOS/RHEL系 sudo yum update -y # 或者使用dnfCentOS 8/Rocky Linux/AlmaLinux sudo dnf update -y这里你第一次用到了sudo命令和包管理命令apt/yum/dnf。sudo允许普通用户以管理员权限执行命令。检查网络连通性确保你的虚拟机可以访问互联网这是后续安装软件的前提。ping -c 4 8.8.8.8如果能看到来自8.8.8.8Google的公共DNS的回复说明网络通畅。如果不行需要检查虚拟机的网络设置通常设置为“NAT模式”即可让虚拟机共享主机的网络。配置SSH远程连接可选但重要我们不可能总在虚拟机窗口里操作。配置SSH后你可以用主机上的终端工具如Windows的PowerShell/macOS的Terminal或者更专业的PuTTY、MobaXterm、SecureCRT来连接虚拟机体验更接近真实运维环境。首先确认SSH服务已安装并运行# Ubuntu/Debian sudo systemctl status ssh # CentOS/RHEL sudo systemctl status sshd如果状态是inactive 则需要启动并设置开机自启sudo systemctl start ssh # 或 sshd sudo systemctl enable ssh # 或 sshd查看虚拟机的IP地址ip addr show找到inet后面跟着的一个类似192.168.x.x或10.0.x.x的地址。在主机上打开终端使用ssh命令连接ssh yourname虚拟机IP地址输入密码后你就远程登录到了虚拟机。后续的操作都可以在这个远程终端里进行。完成这三步你的Linux学习环境才算真正搭建完毕可以进入命令学习的阶段了。3. 命令不是死记硬背而是理解“你在对什么操作”面对海量的Linux命令新手最容易犯的错误是试图背下所有命令和参数。这效率极低。正确的方法是先理解Linux系统的基本构成文件、进程、用户、网络然后学习对应场景下最常用的那几个命令并通过实践记住它们。命令是工具思维才是关键。3.1 文件与目录操作一切皆文件Linux中几乎所有的资源设备、配置、数据都被抽象为“文件”。所以文件操作命令是核心中的核心。导航与查看pwd 打印当前工作目录。迷路时第一个要用的命令。ls 列出目录内容。ls -l看详细信息ls -a看隐藏文件以.开头的文件。cd 切换目录。cd ~回家目录cd ..回上一级cd -回上一个目录。创建、删除与移动mkdir 创建目录。mkdir -p a/b/c可以一次性创建多层目录。touch 创建一个空文件或更新文件的时间戳。cp 复制。cp source dest 加-r参数复制目录。mv 移动或重命名。mv oldname newname。rm 删除。这个命令要慎用rm -r directory删除目录rm -f file强制删除。新手尽量避免使用rm -rf /这样的命令它会导致系统被删除。查看文件内容cat 一次性显示整个文件内容适合小文件。less/more 分页查看大文件支持上下翻页、搜索。head/tail 查看文件开头或结尾几行。tail -f logfile是运维神器可以实时追踪日志文件的新增内容。实操建议打开终端在你的家目录~下尝试创建test目录进入它创建几个文件用ls -l查看再练习复制、移动和删除。这是最基础的肌肉记忆训练。3.2 文本处理与查找运维的日常就是和日志打交道服务器出了问题第一反应就是看日志。如何从海量日志中快速找到关键信息这就需要文本处理命令。grep搜索文本。grep error /var/log/syslog在系统日志里找包含“error”的行。-i忽略大小写-v反向选择不包含的。find查找文件。find / -name *.log -type f在全盘查找所有.log文件。可以根据名称、类型、大小、时间等条件查找功能强大。awk文本分析利器。可以按列处理文本。例如ps aux | awk {print $1, $11}可以打印出进程的所有者和命令名。sed流编辑器用于对文本进行替换、删除、插入等操作。sed s/foo/bar/g file.txt将文件中所有的foo替换为bar。经验之谈不要试图一次性掌握awk和sed的所有用法。先学会用grep找关键字用find找文件。遇到需要提取某一列数据或批量修改文本时再去查awk和sed的特定用法。99%的日常排查grep和tail -f组合就够用了。3.3 系统状态与进程管理知道服务器在“忙什么”你的服务器卡了怎么办你需要一套“体检”命令。资源监控top/htop 动态查看CPU、内存、进程占用情况。htop是top的增强版界面更友好支持鼠标操作。free -h 查看内存使用情况-h参数让数字以人类可读的格式G M显示。df -h 查看磁盘空间使用情况。uptime 查看系统运行时间、负载平均值1分钟、5分钟、15分钟的平均负载。如果负载值持续高于CPU核心数说明系统繁忙。进程管理ps 查看进程快照。ps aux最常用查看所有用户的详细进程信息。kill 终止进程。先用ps aux | grep 进程名找到进程IDPID然后用kill PID发送终止信号。如果普通信号无效可以用kill -9 PID强制杀死但这是最后手段可能导致数据丢失。systemctl现代Linux系统服务管理的核心命令。systemctl status nginx 查看nginx服务的状态。systemctl start/stop/restart nginx 启动/停止/重启服务。systemctl enable/disable nginx 设置/取消服务开机自启。journalctl -u nginx -f 查看指定服务的日志这是systemd系统的日志查看方式。排查顺序当收到报警说服务器慢我一般的排查顺序是uptime看负载 -top看哪个进程占CPU/内存高 -df -h看是不是磁盘满了 -journalctl或tail -f看相关服务日志。这个顺序能快速定位大多数性能问题的方向。4. 理解权限、网络与服务从操作自己到配置对外服务掌握了基本命令你只能操作自己权限内的文件。运维工作意味着你要配置系统让服务跑起来并被外界访问。这涉及到两个核心概念权限和网络。4.1 用户、组与文件权限安全的基础Linux是一个多用户系统。每个文件和目录都有所属用户owner、所属组group和其他人others的读r、写w、执行x权限。ls -l查看权限输出类似-rwxr-xr--。第一位是文件类型-普通文件d目录后面三组分别代表owner、group、others的权限。chmod 修改权限。可以用数字法如chmod 755 file 7rwx 5r-x或符号法如chmod ux file给owner增加执行权限。chown 修改文件所有者和所属组。chown user:group file。sudo 前面提过它以超级用户权限执行命令。/etc/sudoers文件定义了哪些用户能使用sudo。关键原则遵循“最小权限原则”。给程序或用户刚刚好的权限而不是直接给root或777所有人可读可写可执行。一个Web服务器的静态文件目录通常只需要755所有者可读写执行其他人只读执行权限。4.2 网络配置与防火墙让服务被访问虚拟机或云服务器安装后通常需要配置网络和防火墙。网络配置现代Linux多使用NetworkManager或systemd-networkd。配置文件通常在/etc/netplan/Ubuntu 18.04或/etc/sysconfig/network-scripts/CentOS 7下。对于新手如果安装时网络正常可以暂时不深究。如果需要设置静态IP再去修改对应配置文件。防火墙这是保护服务器的关键。主流工具是firewalldCentOS/RHEL 7和ufwUbuntu。ufwUbuntu非常简单。sudo ufw enable # 启用防火墙 sudo ufw allow 22/tcp # 允许SSH端口务必先做这一步否则可能锁死自己 sudo ufw allow 80/tcp # 允许HTTP端口 sudo ufw status numbered # 查看规则firewalldCentOSsudo systemctl start firewalld sudo systemctl enable firewalld sudo firewall-cmd --permanent --add-servicessh # 永久添加ssh服务 sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --reload # 重载配置 sudo firewall-cmd --list-all # 查看所有规则重要警告在开启防火墙前必须先放行你的SSH端口默认22。否则一旦启用防火墙你会立刻断开远程连接只能去虚拟机控制台操作。4.3 安装与配置一个实际服务以Nginx为例理论学习必须落到实地。我们来安装一个最常用的Web服务器——Nginx体验从安装、配置到访问的完整流程。安装# Ubuntu sudo apt update sudo apt install nginx -y # CentOS sudo yum install epel-release -y # 先安装EPEL仓库 sudo yum install nginx -y启动并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx sudo systemctl status nginx # 检查状态应为active (running)配置防火墙如果前面没做# Ubuntu sudo ufw allow Nginx Full # 允许HTTP(80)和HTTPS(443) # CentOS sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps sudo firewall-cmd --reload测试访问打开你主机上的浏览器。输入你的虚拟机IP地址用ip addr show查到的那个。如果看到“Welcome to nginx!”的页面恭喜你的第一个Web服务已经成功运行关键目录与文件网站默认根目录/var/www/html/。你可以把HTML文件放在这里。Nginx主配置文件/etc/nginx/nginx.conf。站点配置文件目录/etc/nginx/conf.d/或/etc/nginx/sites-available/Ubuntu。通常在这里为每个网站创建一个独立的配置文件。日志文件/var/log/nginx/access.log访问日志/var/log/nginx/error.log错误日志。出问题时首先查看这里。通过这个练习你把软件包管理apt/yum、服务管理systemctl、防火墙配置、日志查看串联了起来。这就是一个最简单的运维工作流。5. 用Docker迈入现代运维解决“在我这跑得好好的”问题当你学会了手动安装和配置Nginx、MySQL这些服务后很快就会遇到环境依赖冲突、版本不一致、迁移困难等问题。Docker正是为了解决“应用和环境一起打包在任何地方都能以相同方式运行”而生的。它不是一个虚拟化系统而是一个容器化引擎。5.1 Docker核心概念镜像、容器、仓库镜像Image一个只读的模板包含了运行应用所需的代码、运行时、库、环境变量和配置文件。比如nginx:latest就是一个Nginx镜像。容器Container镜像的运行实例。你可以创建、启动、停止、删除容器。容器之间是相互隔离的。仓库Repository存放镜像的地方。Docker官方仓库是Docker Hub你可以从中拉取pull镜像也可以推送push自己的镜像上去。5.2 Docker安装与最简使用流程安装Docker参考官方文档不同系统命令不同。以Ubuntu为例sudo apt update sudo apt install docker.io -y sudo systemctl start docker sudo systemctl enable docker # 将当前用户加入docker组避免每次都用sudo需要重新登录生效 sudo usermod -aG docker $USER运行你的第一个容器用Docker的方式运行Nginx。# 从Docker Hub拉取最新的Nginx镜像 docker pull nginx:latest # 运行一个Nginx容器将容器的80端口映射到主机的8080端口 docker run -d --name my-nginx -p 8080:80 nginx:latest-d 后台运行。--name 给容器起个名字方便管理。-p 8080:80 端口映射主机端口:容器端口。验证浏览器访问http://你的虚拟机IP:8080应该能看到Nginx欢迎页。管理容器docker ps # 查看运行中的容器 docker ps -a # 查看所有容器包括已停止的 docker stop my-nginx # 停止容器 docker start my-nginx # 启动已停止的容器 docker rm my-nginx # 删除容器需先停止 docker logs my-nginx # 查看容器日志5.3 Docker实战自定义一个简单的Web应用比直接运行现成镜像更进一步我们尝试用Dockerfile构建一个自定义镜像。创建一个项目目录比如myweb并进入。创建一个简单的index.html文件!DOCTYPE html html headtitleMy Docker Web/title/head bodyh1Hello from Docker!/h1/body /html创建一个名为Dockerfile的文件无后缀# 使用官方的Nginx作为基础镜像 FROM nginx:alpine # 将本地的index.html文件复制到容器内的Nginx默认网站目录 COPY index.html /usr/share/nginx/html/ # 暴露80端口声明性操作实际映射在run时指定 EXPOSE 80构建镜像docker build -t my-web-app .-t给镜像打标签.表示Dockerfile在当前目录。运行这个自定义镜像的容器docker run -d --name my-app -p 8888:80 my-web-app访问http://你的IP:8888你会看到自定义的页面。Docker带来的质变现在你的应用index.html和它的运行环境Nginx被打包成了一个整体my-web-app镜像。你可以把这个镜像分享给任何人他们在任何安装了Docker的机器上一条docker run命令就能让应用以完全相同的方式跑起来。再也不用说“在我电脑上是好的”了。5.4 Docker Compose管理多容器应用现实中的应用往往需要多个服务协作比如一个Web应用需要Nginx、Python后端、MySQL数据库。手动管理多个容器及其网络、卷很麻烦。Docker Compose用一份YAML配置文件docker-compose.yml来定义和运行多容器应用。一个最简单的docker-compose.yml示例version: 3 services: web: image: nginx:alpine ports: - 80:80 volumes: - ./html:/usr/share/nginx/html # 将本地html目录挂载到容器 db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: my-secret-pw运行它只需要docker-compose up -d。停止并清理docker-compose down。对于新手先掌握Docker单容器的使用理解镜像、容器、端口映射、数据卷-v参数的概念。当需要部署一个包含数据库的完整应用时再学习Docker Compose它会让你管理复杂应用变得异常轻松。6. 学习路径与就业准备从会做到能干活走完前面五章你已经完成了Linux运维从零到能干活的核心技能闭环。但“能干活”和“能就业”之间还需要一些针对性的准备和练习。6.1 构建你的学习与练习环境放弃图形界面从今天起尽量所有操作都在终端Terminal或通过SSH完成。强迫自己用命令行。制造故障并修复在虚拟机里大胆“搞破坏”。比如误删重要配置文件记得先备份。把磁盘空间填满然后学习如何清理。修改错误的网络配置导致无法上网然后学习如何恢复。写一个死循环脚本耗尽CPU然后用top和kill去处理。搭建一个“全家桶”服务尝试用Docker Compose搭建一个WordPress博客包含Web服务器、PHP、MySQL。这会综合运用网络、存储、环境变量、服务依赖等知识。6.2 面向就业的必备技能拓展企业招聘初级运维除了上述基础通常还会关注Shell脚本编程这是自动化工作的起点。学习写一些简单的脚本比如自动备份日志、监控磁盘使用率、批量创建用户。从#!/bin/bash开始掌握变量、条件判断if、循环for/while、函数。版本控制Git所有配置文件、脚本都应该用Git管理。学习基本的git clone,git add,git commit,git push。把你的练习项目放到GitHub或Gitee上这也是你的“代码简历”。监控与日志了解基本的监控概念。动手搭建一个Prometheus Grafana监控系统可以用Docker跑监控你自己虚拟机的CPU、内存、磁盘使用率。知道如何配置日志轮转logrotate。CI/CD初体验了解持续集成/持续部署的概念。可以在GitHub上创建一个仓库写一个简单的.github/workflowsYAML文件实现当你推送代码时自动构建Docker镜像。这能极大提升你的视野。6.3 项目经验与简历准备你没有实际工作经验但可以创造项目经验。个人博客项目用Docker部署WordPress并为其配置域名可以用本地hosts文件模拟、SSL证书用Let‘s Encrypt的Docker镜像如certbot、CDN可以用云服务商的免费额度等。把这个过程写成详细的文档或博客。服务器监控面板用Docker部署Grafana Prometheus node_exporter为你自己的虚拟机做一个漂亮的监控仪表盘。自动化运维脚本写一个Shell脚本每天定时备份指定目录的数据库和网站文件并发送备份状态到你的邮箱可以用mail命令或调用第三方API。把这些项目清晰地写在你的简历上并附上GitHub链接。在面试中你可以详细讲述在完成这些项目中遇到了什么问题比如权限错误、端口冲突、镜像构建失败以及你是如何排查和解决的。解决问题的能力比死记硬背命令更有价值。最后保持好奇心和动手习惯。运维领域技术迭代很快但Linux基础、网络原理、问题排查思路是永不过时的基石。从今天起把你学到的每一个命令、每一个配置都放在一个具体的、可验证的任务中去理解和运用。当你能够独立地从零部署一个可对外访问的Web应用并清晰地知道其中每一个环节的原理时你就已经具备了运维入门的核心能力。