公司动态
一周掌握企业级应用部署:从Linux到Docker与监控实战
1. 先搞清楚“一周吃透”到底要解决什么问题看到“一周吃透运维核心技能”这种标题很多人的第一反应是怀疑运维这么庞杂的领域怎么可能一周就吃透这恰恰是我们要先拆解清楚的地方。这个主题的核心不是让你在一周内成为十年经验的架构师而是用一周时间建立起一个从零到能动手部署企业级应用的、可验证的实战技能闭环。它的目标读者非常明确零基础或刚入门、想快速切入云计算运维岗位的求职者以及需要快速上手应用部署的开发者。对于这部分人来说最大的障碍不是理论深度而是不知道从哪开始动手以及如何将分散的知识点Linux命令、网络、Docker、监控等串联成一个完整的、能写在简历上的项目。所以这个“一周吃透”的路径本质是一条高度压缩的、以结果为导向的实战学习路径。它不追求面面俱到而是聚焦于几个最核心、面试和工作中最高频的环节Linux基础操作、服务部署尤其是容器化部署、基础网络与监控。价值在于你按照这个路径走完能亲手完成一个像样的、可演示的部署项目从而建立信心并拥有继续深入学习的“抓手”。2. 实战环境准备你的“实验室”该怎么搭在动手之前环境是第一个门槛。我建议所有新手都从虚拟机开始这是成本最低、最安全的“实验室”。不要一上来就折腾云服务器或公司生产环境。2.1 操作系统选择与安装对于学习而言CentOS 7/8 Stream 或 Ubuntu 20.04/22.04 LTS 是最稳妥的选择。它们资料丰富与大多数企业环境兼容。虚拟机软件在Windows或macOS上安装VirtualBox或VMware Workstation Player个人免费。这是第一步不要纠结。系统镜像去阿里云、清华大学的开源镜像站下载系统ISO文件。例如下载CentOS-7-x86_64-DVD-2009.iso或ubuntu-22.04.3-live-server-amd64.iso。创建虚拟机内存至少分配2GB4GB更佳。硬盘至少20GB选择“动态分配”以节省物理空间。网络连接选择“桥接模式”或“NAT模式”。桥接模式会让虚拟机获得一个和你宿主机同网段的独立IP更像一台真实服务器NAT模式更方便上网。初期可以用NAT。安装过程对于CentOS在软件选择时勾选“带GUI的服务器”这样会默认安装一些基础工具对新手更友好。对于Ubuntu Server选择最小化安装即可后续需要什么再装什么。务必记住你设置的root密码和普通用户密码。安装完成后第一件事不是急着敲命令而是配置网络和更新系统。# 对于CentOS 7查看IP地址 ip addr show # 对于Ubuntu查看IP地址 ip a # 更新系统软件包CentOS yum update -y # 更新系统软件包Ubuntu sudo apt update sudo apt upgrade -y2.2 必备工具与连接在宿主机上你需要一个SSH终端工具来连接虚拟机这比在虚拟机窗口里操作更高效。Windows用户使用MobaXterm或Xshell个人免费。它们功能强大支持SFTP文件传输。macOS/Linux用户直接使用系统自带的终端用ssh命令连接。连接命令格式ssh username虚拟机IP地址。例如ssh root192.168.1.100。3. Linux核心命令不是背大全而是用熟高频的“Linux命令大全”让人望而生畏。实际上初期掌握30个左右的高频命令就足以应对80%的日常运维操作。关键不是背而是在具体场景中用熟。3.1 文件与目录操作生存技能这是你操作系统的根基。pwd显示当前目录。迷路时第一个要敲的命令。ls -la以列表形式显示所有文件包括隐藏文件的详细信息。-l看详情-a看隐藏文件几乎永远一起用。cd切换目录。cd ~回家目录cd -回上一个目录。mkdir -p /opt/your_app/{data,logs,conf}创建目录。-p参数可以创建多级目录花括号{}可以批量创建子目录这个技巧在准备项目目录时非常高效。rm -rf强制递归删除。危险命令使用前务必pwd和ls双重确认所在目录和要删的文件。一个经典悲剧rm -rf / usr/local/后面多打了个空格。cp -r递归复制目录。mv移动或重命名文件。find / -name “nginx.conf” 2/dev/null在全盘查找文件。2/dev/null是为了过滤掉大量的权限错误提示让结果更清晰。3.2 文件查看与编辑cat查看短小文件内容。less或more分页查看长文件。按空格翻页按q退出。tail -f /var/log/nginx/access.log实时追踪日志文件末尾内容。这是排查服务问题的“神器”-f参数会让输出随着文件增长而刷新。head -n 20 file查看文件头20行。vim或nano文本编辑器。新手可以从nano开始操作直观CtrlO保存CtrlX退出。vim功能强大但学习曲线陡先学会i插入、Esc退出插入、:wq保存退出、:q!不保存强制退出这四步就能应付编辑。3.3 系统管理与进程ps aux | grep nginx查看进程。ps aux列出所有进程通过管道|用grep过滤出包含“nginx”的行。这是检查服务是否运行的标准操作。top或htop需安装动态查看系统资源CPU、内存占用情况。htop更直观。systemctl start/stop/restart/status nginx服务管理核心命令。systemctl是现代Linux系统CentOS 7, Ubuntu 16.04管理服务守护进程的统一工具。记住status查状态、start启动、stop停止、restart重启这四个就够了。journalctl -u nginx -f查看系统服务的日志。-u指定服务名-f实时追踪。当服务status显示失败时用这个命令看详细错误原因。df -h查看磁盘空间使用情况-h人类可读格式。free -h查看内存使用情况。netstat -tlnp或ss -tlnp查看系统监听了哪些端口及对应进程。这是检查端口冲突、确认服务是否成功监听的关键。3.4 权限与包管理chmod和chown修改文件权限和所有者。常见用法chmod 755 script.sh给脚本执行权限chown -R nginx:nginx /data/www递归修改目录所有者。包管理工具这是安装软件的方式。CentOS/RHELyum install -y docker-ce或dnf install -y docker-ce。Ubuntu/Debiansudo apt install -y docker.io。关键参数-y代表自动确认避免安装过程中需要手动输入y。注意不要试图一次性记住所有命令。最好的方法是为接下来的“部署企业级应用”这个目标服务。比如在安装Docker时你会自然用到curl、yum/apt在配置服务时你会用到vim、systemctl在排查问题时你会用到journalctl、tail -f。在实战中学习记忆最牢固。4. 核心实战从零部署一个“企业级”应用我们选择一个经典组合作为实战项目通过Docker部署Nginx Web服务并集成Prometheus监控。这个项目虽小但涵盖了现代运维的核心要素容器化、服务暴露、监控。4.1 第一步安装与配置DockerDocker是容器化部署的事实标准必须掌握。卸载旧版本如果有sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 或 Ubuntu sudo apt-get remove docker docker-engine docker.io containerd runc安装依赖与添加仓库# CentOS sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # Ubuntu sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable安装Docker引擎# CentOS sudo yum install -y docker-ce docker-ce-cli containerd.io # Ubuntu sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io启动并设置开机自启sudo systemctl start docker sudo systemctl enable docker验证安装运行sudo docker run hello-world。如果能看到欢迎信息说明Docker安装成功并能从网络拉取镜像。可选但重要将当前用户加入docker组避免每次都要sudosudo usermod -aG docker $USER # 然后需要退出当前终端重新登录才能生效4.2 第二步使用Docker运行Nginx现在我们不用编译安装一行命令启动一个Web服务器。拉取并运行Nginx镜像docker run -d --name my-nginx -p 8080:80 nginx:latest-d后台运行。--name my-nginx给容器起个名字方便管理。-p 8080:80端口映射。将宿主机的8080端口映射到容器的80端口Nginx默认端口。nginx:latest使用的镜像名和标签。验证服务在虚拟机内执行curl http://localhost:8080。或者在宿主机浏览器访问http://虚拟机IP:8080。你应该能看到Nginx的欢迎页面。查看容器状态与日志docker ps # 查看运行中的容器 docker logs my-nginx # 查看这个容器的日志 docker exec -it my-nginx bash # 进入容器内部调试用4.3 第三步部署一个自定义应用以静态网站为例单纯跑Nginx没意思我们要部署自己的内容。在宿主机准备网页文件mkdir -p ~/my-website echo h1Hello, Cloud Ops! This is my first deployed app./h1 ~/my-website/index.html使用数据卷运行Nginx挂载自定义页面# 先停止并删除旧容器 docker stop my-nginx docker rm my-nginx # 运行新容器将宿主机目录挂载到容器内 docker run -d --name my-app -p 8080:80 -v ~/my-website:/usr/share/nginx/html nginx:latest-v ~/my-website:/usr/share/nginx/html将宿主机的~/my-website目录挂载到容器内的Nginx默认网站根目录。这样修改宿主机文件容器内立即生效。再次访问http://虚拟机IP:8080页面内容应该变成了你自定义的Hello, Cloud Ops!。4.4 第四步引入监控 - 部署Prometheus一个没有监控的应用就像在黑夜里开车。Prometheus是最流行的开源监控系统。创建Prometheus配置文件prometheus.ymlmkdir -p ~/prometheus cat ~/prometheus/prometheus.yml EOF global: scrape_interval: 15s # 每15秒抓取一次数据 scrape_configs: - job_name: prometheus static_configs: - targets: [localhost:9090] # 监控Prometheus自己 - job_name: nginx-exporter static_configs: - targets: [nginx-exporter:9113] # 我们将要部署的Nginx指标暴露器 EOF运行Prometheus容器docker run -d --name prometheus -p 9090:9090 \ -v ~/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus:latest访问http://虚拟机IP:9090进入Prometheus的Web UI。为Nginx添加指标暴露器nginx-exporter Nginx本身不暴露Prometheus格式的指标需要一个“导出器”。docker run -d --name nginx-exporter -p 9113:9113 \ --link my-app:nginx-host \ nginx/nginx-prometheus-exporter:latest \ -nginx.scrape-uri http://nginx-host:80/stub_status这里使用了--link将my-app容器我们之前运行的Nginx以别名nginx-host连接到nginx-exporter容器这样导出器才能访问到Nginx的状态接口。注意默认Nginx镜像没有启用stub_status模块所以上面的导出器会报错。这引出了一个关键点企业级部署需要自定义镜像或配置。为了简化我们先理解流程。在生产中你需要构建一个包含stub_status配置的Nginx镜像。更新Prometheus配置并重载 修改~/prometheus/prometheus.yml确保nginx-exporter的targets正确。然后让Prometheus重载配置docker kill -s HUP prometheus在Prometheus UI的“Status - Targets”页面应该能看到nginx-exporter和prometheus两个job都是“UP”状态。至此你完成了一个微缩版但结构完整的“企业级应用”部署应用Nginx容器化运行、通过端口对外提供服务、配置了独立的监控系统进行指标采集。这个架子和部署一个复杂的微服务应用在本质上是一样的。5. 技能串联与问题排查把点连成线单独会几个命令和工具没用运维的核心价值在于串联和排错。基于上面的实战我们梳理几个典型场景。5.1 场景一服务访问不了这是最常见的问题。按照以下顺序排查能解决90%的连通性问题。检查服务进程是否存活docker ps | grep my-app # 或者 systemctl status docker # 确保Docker本身是运行的如果容器没运行用docker logs my-app看启动日志。检查端口是否监听ss -tlnp | grep 8080 # 或 netstat -tlnp | grep 8080查看宿主机8080端口是否被Docker进程监听。检查防火墙# CentOS 7 firewall-cmd --list-ports firewall-cmd --add-port8080/tcp --permanent firewall-cmd --reload # Ubuntu (如果使用ufw) sudo ufw status sudo ufw allow 8080/tcp从宿主机内部测试curl http://localhost:8080如果宿主机能通但外部不通问题大概率在防火墙或网络策略如云服务器的安全组。5.2 场景二磁盘空间不足告警使用df -h发现/或/var分区使用率超过90%。定位大文件或目录du -sh /var/* | sort -rh | head -10查看/var目录下哪个子目录最大。如果是Docker占用过多 Docker的镜像、容器、日志默认在/var/lib/docker。docker system df # 查看Docker磁盘使用概况 docker image prune -a # 删除所有未被容器使用的镜像谨慎 docker container prune # 删除所有停止的容器 docker volume prune # 删除未被使用的数据卷清理日志文件# 查看大日志文件 find /var/log -type f -name “*.log” -size 100M # 可以清空非删除日志文件例如 /var/log/somelarge.log # 更好的方式是配置日志轮转logrotate5.3 场景三应用响应慢使用top或htop发现CPU或内存占用高。定位进程在top界面按P按CPU排序或M按内存排序找到占用资源最高的进程PID。分析进程ps aux | grep PID # 查看进程详情 docker stats # 查看所有容器的实时资源占用如果是一个Java应用可能是内存泄漏如果是Web服务器可能是遭遇攻击或配置不当。查看应用日志docker logs --tail 100 -f my-app在日志中搜索error、timeout、slow等关键词。网络分析ss -s # 查看网络连接统计 netstat -an | grep :8080 | wc -l # 查看8080端口的连接数连接数异常高可能是CC攻击的迹象。6. 从实战到就业还需要补充什么通过一周的高强度实战你掌握了Linux基础、Docker部署和简单监控。但要达到“就业”水平还需要在以下方向有意识地深化和拓展6.1 版本管理与配置自动化手动敲命令部署只适用于学习和测试。企业环境需要自动化。Shell脚本把部署步骤写成脚本.sh文件。例如一个脚本包含更新系统、安装Docker、拉取镜像、运行容器。这是最基础的自动化。Ansible这是运维必须掌握的配置管理工具。它通过SSH批量管理服务器用YAML文件描述部署状态“声明式”。学习编写playbook来部署Nginx、配置防火墙、管理用户。Git将你的脚本、Ansible Playbook、配置文件存入Git仓库如GitLab、Gitee。这是团队协作和版本回溯的基础。6.2 容器编排与云原生单机Docker只是起点企业应用多是集群部署。Docker Compose用于定义和运行多容器应用。用一个docker-compose.yml文件定义Nginx、Prometheus、Grafana可视化等服务实现一键启动。这是学习编排的第一步。Kubernetes (K8s)容器编排的事实标准。学习成本高但至关重要。可以从 Minikube 或 Kind 在本地搭建一个单节点集群开始理解 Pod、Deployment、Service、Ingress 这些核心概念。“会部署应用到K8s”是当前运维岗位的强有力加分项。6.3 监控、日志与告警体系我们只部署了Prometheus采集指标一个完整的可观测性体系还包括Grafana将Prometheus的数据变成直观的仪表盘。用Docker运行Grafana并添加Prometheus作为数据源。日志收集应用日志不能只靠docker logs查看。学习ELK Stack(Elasticsearch, Logstash, Kibana) 或Loki将容器日志集中收集、索引和展示。告警配置Prometheus Alertmanager当指标异常如服务器宕机、请求错误率飙升时能通过邮件、钉钉、企业微信等渠道发出告警。6.4 网络与安全基础网络理解Docker的网络模式bridge, host, none理解K8s的Service和Ingress如何对外暴露服务。了解基本的TCP/IP、DNS、HTTP/HTTPS。安全不仅仅是防火墙。包括服务器最小化安装、定期更新补丁、使用非root用户运行服务、配置SSH密钥登录禁用密码、Docker镜像安全扫描、配置TLS证书启用HTTPS。这一周的高强度学习目的是为你打开一扇门并给你一张清晰的路线图。真正的“吃透”在于后续持续的、有目标的练习。最好的方法就是用这套流程去部署一个更复杂的开源项目比如一个博客系统WordPress、一个CI/CD工具Jenkins或者一个简单的微服务demo。在过程中你会遇到各种问题而解决这些问题的过程就是你技能飞速提升的时候。