Docker与K8S零基础入门:从环境搭建到集群部署实战指南

📅 2026/7/4 18:55:34 👁️ 阅读次数 📝 编程学习
Docker与K8S零基础入门:从环境搭建到集群部署实战指南

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度

1. 先搞清楚这套教程到底能帮你解决什么问题

如果你正在看Linux运维、云计算或者想转行做运维开发,大概率会碰到Docker和Kubernetes这两个词。它们几乎是现在企业里做应用部署和管理的标配。但很多新手一上来就被各种概念、命令和复杂的集群环境劝退,网上资料又多又杂,不知道从哪里开始,更不知道怎么才算“学会”。

这套“Docker+K8S”教程,核心目标就是解决这个“从零到一”的落地问题。它不是一个单纯的概念科普,而是试图通过一期集中的视频内容,配合课件,让你能动手把环境搭起来,把最基本的容器跑起来,再把容器放到K8S集群里管起来。对于零基础的人来说,最值钱的部分不是它讲了多少高级特性,而是它能不能帮你跨过“第一次成功运行”这个门槛,建立起一个可复现的、属于自己的实验环境。

所以,在看任何教程之前,你得先明确自己的目标:你是想了解概念,还是想真的能动手操作?这套教程显然是偏向后者。它适合那些已经知道Linux基础命令(比如ls,cd,mkdir),但对容器和集群还完全没概念,急需一个“手把手”带入门路径的人。如果你已经能熟练编写Dockerfile和K8S的YAML文件,那这套教程的深度可能就不太够了。

2. 学习前的准备:你的机器和环境到底行不行

在点开视频、下载课件之前,最容易被忽略但最关键的一步是:检查你的实验环境。很多人卡在第一步,不是因为教程讲得不好,而是环境根本没准备好。

2.1 硬件与操作系统选择

对于Docker和K8S学习,硬件门槛其实不高,但选择不对会很折腾。

  • 最低配置:我个人建议,至少准备一台拥有4核CPU、8GB内存、50GB可用磁盘空间的机器。这个配置可以让你在单机上模拟一个微型的K8S集群(比如使用Minikube或Kind)。内存是关键,因为K8S的组件本身就要占用不少资源。
  • 操作系统强烈推荐使用Linux。Ubuntu 20.04/22.04 LTS或CentOS 7/8 Stream是社区资料最全、兼容性最好的选择。虽然在Windows和macOS上也能通过Docker Desktop学习Docker,但一旦涉及到K8S,在Linux原生环境下的操作更接近生产环境,踩的坑也更有普遍性。
  • 虚拟化:如果你的主力机是Windows/macOS,那么安装一个Linux虚拟机(VM)是必经之路。VMware Workstation Player或VirtualBox都可以。给虚拟机分配至少2核、4GB内存,网络模式选择NAT或桥接。不要试图在Windows的WSL1里玩K8S,会走很多弯路;WSL2配合Docker Desktop可以,但配置稍复杂。

2.2 网络与权限准备

这是两个隐形的“杀手”。

  • 网络:Docker拉取镜像、K8S下载组件,都需要访问外网。确保你的虚拟机或主机能稳定访问互联网。如果身处公司内网或有网络策略限制,你需要提前准备好镜像加速器(如阿里云、腾讯云镜像加速器)的地址,并知道如何配置Docker的daemon.json
  • 权限:在Linux下,Docker命令默认需要sudo权限。为了方便学习,教程通常会教你将当前用户加入docker用户组。这一步有安全风险,但对于学习机来说是常规操作sudo usermod -aG docker $USER,然后退出重新登录。执行后,务必用docker ps命令测试是否成功。

2.3 课件与资料定位

“附课件”是个很好的补充,但你要管理好预期。课件通常包含:

  1. PPT或PDF讲义:浓缩了视频里的关键概念和命令。
  2. 脚本文件:可能是一些安装脚本、示例的Dockerfile和K8S YAML文件。
  3. 环境配置说明:可能是一个README,写明需要的软件版本号。

拿到课件后,先别急着看内容。花5分钟浏览一下目录结构,找到那些.sh,.yaml,.dockerfile后缀的文件。这些才是你后续要亲手运行或修改的“实操素材”。把课件放在你Linux环境里一个清晰的路径下,比如~/learn-docker-k8s/

3. 核心学习路径拆解:从Docker单机到K8S集群

一套好的教程,应该有一条清晰的、循序渐进的路径。下面我结合通常的教学逻辑,拆解你应该关注的几个关键阶段。

3.1 第一阶段:彻底搞懂Docker基础操作

这个阶段的目标不是成为Docker专家,而是建立“镜像-容器”的肌肉记忆。

  1. 安装与验证:跟着教程安装Docker Engine。安装成功后,不要满足于docker --version。一定要运行docker run hello-world。这个命令会拉取镜像、创建容器、运行并输出信息。看到“Hello from Docker!”的成功信息,才证明你的Docker安装和网络都是通的。
  2. 镜像操作三连docker pull(拉取)、docker images(查看)、docker rmi(删除)。用Nginx或Redis这类小型镜像做练习。体会镜像就像是一个只读的模板。
  3. 容器生命周期管理:这是重中之重。
    • docker run -d --name my-nginx nginx:后台运行一个容器。
    • docker ps/docker ps -a:查看运行中/所有容器。
    • docker stop/docker start/docker restart:停止、启动、重启。
    • docker rm:删除已停止的容器(加-f可强制删除运行中的)。
    • 关键理解run是创建+启动,start是启动已存在的。删容器不会删镜像。
  4. 进入容器与查看日志
    • docker exec -it my-nginx /bin/bash:进入容器内部,这是调试和排查问题的关键手段。
    • docker logs my-nginx:查看容器标准输出日志。-f参数可以实时跟踪。
  5. 端口映射与数据持久化
    • docker run -d -p 8080:80 nginx:把宿主机的8080端口映射到容器的80端口。立刻用浏览器访问http://localhost:8080验证。
    • docker run -d -v /宿主机路径:/容器内路径 nginx:把宿主机目录挂载到容器内。这是保存数据(如数据库文件、配置文件)不被容器删除的关键。

这个阶段的成功标准:你能独立完成“拉取一个MySQL镜像,运行一个容器,映射到3306端口,挂载一个数据目录,并进入容器内用mysql-client连接它”。如果卡住,回头检查端口是否被占用、目录权限是否正确。

3.2 第二阶段:自己动手制作镜像(Dockerfile)

会用现成镜像只是第一步,能制作自己的镜像才是质的飞跃。

  1. 理解Dockerfile每一行:教程会带你写一个简单的Dockerfile,比如打包一个Python应用。你要理解:
    • FROM:基于哪个基础镜像。
    • WORKDIR:设置容器内的工作目录。
    • COPYADD:将本地文件复制到镜像内。
    • RUN:在构建镜像时执行的命令(如安装依赖)。
    • CMDENTRYPOINT:容器启动时执行的命令。
  2. 构建与运行
    • docker build -t my-app:v1 .:构建一个标签为my-app:v1的镜像。注意最后那个点.,代表当前目录是构建上下文。
    • docker run my-app:v1:运行你自己构建的镜像。
  3. 常见坑点
    • 构建上下文过大COPY . .会把当前目录所有文件(包括虚拟环境、日志)都打包进镜像,导致镜像臃肿。要用.dockerignore文件排除不需要的文件。
    • 层缓存问题:Dockerfile的每一行都会生成一个层。经常变动的步骤(如COPY源码)要放在后面,不常变的步骤(如RUN apt-get update)放在前面,以利用缓存加速构建。

这个阶段的成功标准:你能为一个简单的Web应用(如Flask)编写Dockerfile,构建出镜像并运行成功,外部能通过端口访问。

3.3 第三阶段:搭建最小化的K8S实验环境

这是从单机到集群的跳跃。不要一上来就想在生产环境部署,先用单机工具模拟。

  1. 工具选型:对于初学者,Minikube是最佳选择。它会在你的单机(或虚拟机)里创建一个单节点的K8S集群,包含了所有核心组件。Kind也是一个轻量级选择,但它更偏向于用容器模拟节点,适合CI/CD测试。
  2. 安装与启动Minikube
    • 按照官网或教程安装Minikube二进制文件和驱动(如VirtualBox或Docker驱动)。
    • 启动命令:minikube start --driver=docker(如果你用Docker做驱动)。这个命令会下载镜像、启动一个虚拟机或容器来运行K8S。
    • 启动后,用minikube statuskubectl get nodes验证集群状态。看到节点状态是Ready,才算成功。
  3. 配置kubectlkubectl是操作K8S的命令行工具。Minikube会自动为你配置好上下文。用kubectl cluster-info查看集群信息。

注意:如果minikube start卡住或报错,90%的原因出在网络(镜像拉取失败)或驱动上。先检查虚拟机软件(如VirtualBox)是否安装正确,或者尝试切换为Docker驱动。

3.4 第四阶段:理解K8S核心对象与操作

学习K8S,本质是学习它定义的几种API对象(资源)。从最核心的三种开始:

  1. Pod:K8S管理的最小单元。一个Pod可以包含一个或多个容器(通常是一个)。但记住,我们一般不直接创建Pod
    • 命令:kubectl get pods查看Pod。
  2. Deployment:这是你最常用的对象。它用来管理Pod的副本集,提供滚动更新、回滚等功能。它保证了应用的期望状态。
    • 操作流程:编写一个deployment.yaml文件,定义镜像、副本数等。然后kubectl apply -f deployment.yaml
    • kubectl get deploymentskubectl get pods观察Pod被创建的过程。
  3. Service:Pod的IP会变,Service提供一个稳定的IP和端口,供内部或外部访问Pod。
    • 类型:ClusterIP(集群内访问)、NodePort(在集群每个节点上开放端口)、LoadBalancer(云厂商提供负载均衡器)。
    • 创建一个service.yaml,关联到上面的Deployment。用minikube service <服务名> --url获取访问地址,在浏览器中打开。

这个阶段的成功标准:你能编写一个Deployment和一个Service的YAML文件,通过kubectl apply部署一个Nginx应用,并通过Service成功访问到它。理解Deployment如何控制Pod的创建和更新。

4. 从“跑通”到“理解”:关键概念与排查心法

跟着教程做完一遍,可能只是“照葫芦画瓢”。要真正掌握,必须理解背后的逻辑,并知道出了问题怎么看。

4.1 核心概念关联图

你需要在大脑里建立这样一个简单的关联模型:

Deployment (定义期望状态) | v ReplicaSet (确保Pod副本数) | v Pod (运行容器) <--- Service (提供访问入口) | v Container (你的应用)

当你想扩展应用时,修改的是Deployment里的replicas(副本数),而不是手动去创建Pod。Service通过selector匹配Pod的labels来找到它们。

4.2 故障排查命令链

当你的应用在K8S里没跑起来,按这个顺序查:

  1. 看Pod状态kubectl get pods。如果状态不是Running,看是PendingCrashLoopBackOff还是Error
  2. 看Pod详情kubectl describe pod <pod-name>。这是最重要的命令。关注Events部分,里面会告诉你调度失败、镜像拉取失败、启动失败的具体原因。
  3. 看容器日志kubectl logs <pod-name>。如果Pod内有多个容器,用-c <container-name>指定。-f可以实时跟踪日志。
  4. 进入Pod调试kubectl exec -it <pod-name> -- /bin/sh。类似于Docker的exec,可以进入容器内部检查文件、进程、网络。
  5. 看Service和Endpointskubectl get svckubectl describe svc <svc-name>。确认Service的Selector是否匹配了Pod的Labelskubectl get endpoints <svc-name>可以看Service背后关联的Pod IP和端口对不对。

4.3 YAML文件编写要点

教程的课件里会提供YAML示例,但你要学会自己看和改。

  • 必备字段apiVersion,kind,metadata.name是每个资源的必须项。
  • 标签(Labels)metadata.labelsspec.selector.matchLabels是Deployment找到自己Pod的钥匙,也是Service找到Pod的钥匙。它们必须匹配。
  • 容器定义:在spec.template.spec.containers里,image(镜像名和标签)和ports(容器端口)是最关键的。
  • 快速生成模板:不用死记硬背。用kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > nginx-deploy.yaml可以生成一个Deployment的YAML模板,然后在其基础上修改。

5. 超越教程:如何将知识转化为实战能力

教程带你入门,但真正的能力是在后续的自主探索和项目中建立的。

5.1 设计你的第一个综合练习

不要停留在教程的例子上。设计一个稍微综合的场景,例如:目标:部署一个带前端和后端的微服务 demo。

  1. 准备两个简单的应用:一个Python Flask后端(返回{“message”: “Hello from Backend”}),一个Nginx前端(配置代理到后端)。
  2. 分别为它们编写Dockerfile,构建成镜像(可以推送到Docker Hub或使用本地镜像)。
  3. 编写两个Deployment(frontend-deployment, backend-deployment)和两个Service。后端Service类型为ClusterIP,前端Service类型为NodePort
  4. 在前端Nginx的配置中,将代理地址指向后端Service的名字(K8S集群内可以通过Service名进行DNS解析)。
  5. 应用所有配置,通过minikube service frontend-service --url访问前端,看是否能正确显示后端返回的信息。

这个练习会强迫你理解服务发现、网络通信和配置管理。

5.2 学习使用ConfigMap和Secret

应用配置(如数据库连接串)和敏感信息(如密码)不应该硬编码在镜像或YAML里。

  • ConfigMap:存储配置数据。kubectl create configmap my-config --from-file=./app.properties,然后在Pod的YAML里通过envFromvolume挂载使用。
  • Secret:存储敏感数据(注意:默认是base64编码,并非加密)。用法类似ConfigMap。这是将应用“配置”与“镜像”分离的关键一步。

5.3 尝试Helm Chart(可选但建议了解)

当你的应用包含很多个YAML文件(Deployment, Service, ConfigMap等)时,管理起来很麻烦。Helm是K8S的包管理工具,它把一组相关的K8S资源打包成一个Chart,通过values.yaml文件进行参数化配置。 对于初学者,可以先理解Chart的概念,知道它由Chart.yaml,values.yaml,templates/目录组成。尝试安装一个现成的Chart,如helm install my-nginx bitnami/nginx,感受一下一键部署的便利。

5.4 资源管理与监控意识

即使在学习环境,也要有资源意识。

  • 资源请求与限制:在Pod的YAML中,可以为容器设置resources.requests(调度依据)和resources.limits(运行上限)。例如:
    resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
  • 查看资源使用kubectl top podkubectl top node可以查看资源消耗情况(需要安装Metrics Server,Minikube可通过minikube addons enable metrics-server启用)。

6. 常见问题与心态调整

最后,分享几个我见过新手最容易卡住的地方和学习建议。

  1. 镜像拉取失败/超时:这是网络问题。为Docker配置国内镜像加速器。对于K8S拉取k8s.gcr.io的镜像,通常需要借助第三方仓库或科学上网(此处按安全要求省略相关描述,可替换为:通常需要配置镜像仓库镜像或使用其他可访问的镜像源,具体请根据当前网络环境搜索解决方案)。
  2. Pod一直处于Pending状态:用kubectl describe pod查看事件,通常是资源不足(CPU/内存)或节点Selector不匹配。单机Minikube环境下,一般是内存不够了,尝试给虚拟机分配更多内存,或减少部署的副本数。
  3. Pod运行但服务无法访问
    • 检查Service的selector和Pod的labels是否匹配。
    • 检查Pod内容器监听的端口是否和Service定义的targetPort一致。
    • kubectl exec进入Pod,用curl localhost:<容器端口>测试容器本身是否正常。
  4. “听懂了,但自己一做就忘”:完全正常。容器和K8S的命令、YAML字段就是需要反复练习的肌肉记忆。我的建议是:准备一个干净的虚拟机快照。每学完一个阶段,就恢复快照,完全不看教程,凭记忆和笔记从头操作一遍。这个“重建”的过程是巩固知识最有效的方法。
  5. 面对大量概念感到焦虑:不要试图一次性理解所有概念。先抓住主线:用Docker打包应用,用Deployment部署应用,用Service暴露应用。其他如Ingress(更高级的流量入口)、PersistentVolume(持久化存储)、Namespace(资源隔离)等,都是在主线跑通后,根据需求再去深入学习的扩展点。

这套教程的价值在于它提供了一个结构化的起点和可操作的实验材料。但它只是一个开始。真正的“实战”能力,来源于你用这些基础知识,去定义、打包、部署和运维一个属于自己的真实项目的过程。从今天起,把你本地的一个小项目容器化,然后丢到Minikube集群里跑起来,这就是最好的实战。

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度