Docker与Kubernetes零基础实战:2026版速通教程与核心概念解析
这次我们来看一套面向2026年的Docker与Kubernetes(K8S)零基础实战教程。这套教程的核心目标很直接:帮助没有容器和编排经验的开发者或运维人员,通过一期视频和配套课件,快速掌握Linux云计算运维的核心技术栈。在当前云原生和AI运维智能体快速发展的背景下,掌握Docker和K8S已成为从桌面运维到基础设施工程师的必备技能。
这套教程最值得关注的点在于其“速通”定位。它不追求大而全的理论体系,而是聚焦于“能不能用”和“怎么用”。课程内容会覆盖从Docker Desktop安装、镜像操作、容器管理,到K8S集群搭建、核心资源对象(如Pod、Deployment、Service)使用,再到生产环境常见问题(如镜像扫描、Page Cache管理)的实战解决方案。对于希望快速上手容器化部署、为后续的AI应用(如AI模型K8S部署)或微服务运维打下基础的读者,这套教程提供了一个高效的起点。
本文将基于这套教程的框架,为你拆解从零到一的完整学习路径。我们会重点梳理环境准备、关键操作、实战示例以及那些新手最容易踩坑的地方(比如Windows Docker安装报错、K8S集群初始化失败、Java应用在K8S中的特殊配置等),确保你看完不仅能理解概念,更能动手完成一套可运行的容器化环境。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 技术栈覆盖 | Docker 容器技术 + Kubernetes (K8S) 容器编排,涵盖Linux运维基础。 |
| 学习目标 | 零基础入门,达到可独立完成Docker化应用部署及简单K8S集群管理的水平。 |
| 实战重点 | Docker安装与镜像操作、单机容器管理、K8S集群搭建(如使用kubeadm)、核心资源编排、服务暴露、存储与配置管理。 |
| 硬件门槛 | 较低。建议至少2核CPU、4GB内存、20GB磁盘空间。可在虚拟机(如VirtualBox/VMware)或云服务器上完成所有实验。 |
| 软件环境 | 支持Windows(Docker Desktop)、macOS、Linux(Ubuntu/CentOS等)。教程通常以Linux为主要操作环境。 |
| 课程形式 | 视频讲解 + 配套课件(PPT/PDF/代码脚本),侧重操作演示与命令解读。 |
| 延伸价值 | 为学习云原生、微服务、CI/CD、以及 AI应用在K8S上的部署 (如模型服务)奠定基础。 |
2. 适用场景与使用边界
这套教程主要适合以下几类人群:
- 运维新手/转行人员 :希望快速进入云计算、运维领域,掌握当前企业最主流的容器化技术栈。
- 开发人员 :需要将应用(如Spring Boot、Python Web、Node.js应用)进行容器化打包,并了解基本的K8S部署流程。
- 学生或爱好者 :对云原生技术感兴趣,希望通过一套结构化的实战材料入门。
- IT基础设施工程师 :在面试或工作中需要补充容器编排方面的实操经验。
它能解决的核心问题包括:
- 环境标准化 :通过Docker镜像解决“在我机器上能跑”的环境一致性问题。
- 应用快速部署与扩缩容 :利用K8S实现应用的声明式部署、滚动更新和弹性伸缩。
- 学习路径迷茫 :提供一条从安装、基础命令到核心概念实战的清晰路径,避免在碎片化资料中迷失。
需要注意的边界:
- 非深度源码剖析 :教程侧重于使用和运维,不会深入讲解Docker或K8S的底层内核原理、源码实现。
- 生产环境简化 :教程中的集群搭建(如单节点或三节点集群)是学习用途,与高可用、多租户、严格安全策略的生产级集群有差距。
- 特定云厂商集成 :教程通常基于原生K8S(如使用kubeadm),不会深入涉及AWS EKS、阿里云ACK等云托管服务的特有功能,但原理相通。
3. 环境准备与前置条件
开始动手前,你需要准备好实验环境。以下是通用要求,具体版本可根据教程调整。
3.1 操作系统选择
- 主推Linux :Ubuntu 20.04/22.04 LTS 或 CentOS 7/8 Stream。这是学习K8S最接近生产环境的选择,绝大多数教程命令基于Linux。
- Windows/macOS :可以安装Docker Desktop用于学习Docker部分。但K8S部分,Windows通常通过Docker Desktop内置的Kubernetes或使用虚拟机运行Linux节点来学习;macOS类似。
3.2 硬件资源建议
- 最低配置 :2核CPU,4GB内存,30GB硬盘。适用于运行单节点的K8S集群(如使用
kubeadm搭建单控制平面集群)。 - 推荐配置 :4核CPU,8GB内存,50GB硬盘。可以更流畅地运行多节点实验或资源需求稍大的应用。
- 虚拟化 :如果你的主机是Windows/macOS,需要安装VirtualBox或VMware,并在其中创建Linux虚拟机。 确保主机BIOS中已开启虚拟化支持(Intel VT-x/AMD-V) 。
3.3 软件与依赖
- 虚拟机软件 (可选):VirtualBox, VMware Workstation Player。
- 终端工具 :PuTTY(Windows),或系统自带终端。
- 容器运行时 :Docker Engine 或 Docker Desktop。
- Kubernetes :通过
kubeadm、kubelet、kubectl工具集安装。 - 网络 :实验环境需要稳定的网络连接以下载镜像和包。
3.4 关键检查点 在安装Docker和K8S之前,请先完成以下检查:
- 关闭防火墙与SELinux (学习环境):避免网络策略阻断容器间通信。
# Ubuntu sudo ufw disable # CentOS sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config - 关闭Swap :Kubernetes 1.8+要求禁用Swap以保证kubelet正常工作。
sudo swapoff -a # 永久禁用,编辑 /etc/fstab,注释掉包含swap的行 sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab - 配置主机名与Hosts :确保节点之间可以通过主机名解析。
sudo hostnamectl set-hostname k8s-master # 例如 echo "192.168.1.100 k8s-master" | sudo tee -a /etc/hosts echo "192.168.1.101 k8s-node1" | sudo tee -a /etc/hosts
4. 安装部署与启动方式
我们将分两步走:先安装Docker,再搭建Kubernetes集群。以下命令以Ubuntu 22.04为例。
4.1 Docker Engine 安装与启动 Docker是运行容器的基石。
# 1. 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2. 安装依赖包
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# 3. 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. 设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 安装Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 6. 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 7. 验证安装
sudo docker run hello-world
如果看到“Hello from Docker!”的输出,说明Docker安装成功。 对于Windows/macOS用户,直接下载并安装 Docker Desktop ,安装后启动即可。
4.2 Kubernetes (K8S) 集群搭建(使用kubeadm) kubeadm是官方推荐的快速搭建集群的工具。
# 1. 安装 kubeadm, kubelet, kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 防止自动更新
# 2. 配置容器运行时(使用Docker时,需配置cgroupdriver为systemd)
sudo cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker
# 3. 初始化Master节点(仅在Master节点执行)
# 注意:替换<master-node-ip>为你Master节点的实际IP地址
sudo kubeadm init --apiserver-advertise-address=<master-node-ip> --pod-network-cidr=10.244.0.0/16
# 初始化成功后,会输出类似下面的命令,需要执行以配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 4. 安装Pod网络插件(例如Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 5. 查看节点状态,等待CoreDNS Pod全部Running
kubectl get nodes
kubectl get pods --all-namespaces
如果 kubectl get nodes 显示Master节点状态为 Ready ,并且 kube-system 命名空间下的Pod(尤其是coredns和flannel)都处于 Running 状态,说明单节点集群搭建成功。
4.3 加入Worker节点(可选) 如果你有多个节点,在Master节点初始化输出的结果中,会包含一个 kubeadm join 命令。在Worker节点上以root身份执行该命令即可加入集群。
5. 功能测试与效果验证
环境搭建好后,需要通过一系列操作来验证Docker和K8S是否正常工作。
5.1 Docker 基础功能验证
- 测试目的 :确认Docker能拉取镜像、运行容器、进行基本生命周期管理。
- 操作步骤 :
- 拉取一个Nginx镜像并运行。
sudo docker pull nginx:alpine sudo docker run -d --name my-nginx -p 8080:80 nginx:alpine - 检查容器状态。
sudo docker ps - 访问服务。在浏览器打开
http://<你的服务器IP>:8080,应看到Nginx欢迎页。 - 进入容器内部。
sudo docker exec -it my-nginx /bin/sh # 在容器内执行命令,如 ls / exit - 停止并删除容器。
sudo docker stop my-nginx sudo docker rm my-nginx
- 拉取一个Nginx镜像并运行。
5.2 Kubernetes 核心功能验证
- 测试目的 :验证K8S集群能调度Pod、提供服务发现、进行基本的扩缩容。
- 操作步骤 :
- 部署一个简单的应用 。
# 创建一个Deployment kubectl create deployment nginx-deploy --image=nginx:alpine --replicas=2 # 创建一个Service来暴露这个Deployment kubectl expose deployment nginx-deploy --name=nginx-svc --type=NodePort --port=80 - 查看资源状态 。
观察Pod是否变为kubectl get deployments kubectl get pods kubectl get svc nginx-svcRunning,并记录nginx-svc的NodePort(如80:3xxxx/TCP中的3xxxx)。 - 访问应用 。使用Master或任意Node的IP地址,加上上面记录的NodePort端口,在浏览器中访问,应看到Nginx页面。
- 测试扩缩容 。
kubectl scale deployment nginx-deploy --replicas=5 kubectl get pods # 观察Pod数量变为5个 kubectl scale deployment nginx-deploy --replicas=1 kubectl get pods # 观察Pod数量缩回1个 - 清理测试资源 。
kubectl delete svc nginx-svc kubectl delete deployment nginx-deploy
- 部署一个简单的应用 。
6. 核心概念实战与示例
理解了基础操作后,需要深入几个核心概念,这是从“会用命令”到“理解编排”的关键。
6.1 使用YAML文件管理资源 命令行创建资源方便,但生产环境主要使用YAML文件进行声明式管理。
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
使用 kubectl apply -f nginx-deployment.yaml 来创建或更新资源。这种方式易于版本控制和复用。
6.2 配置管理:ConfigMap与Secret 将配置与镜像解耦。
- ConfigMap :存储非敏感的配置数据。
# 从文件创建ConfigMap echo "server_name myapp.local;" > nginx.conf.snippet kubectl create configmap nginx-config --from-file=nginx.conf.snippet # 在Pod中作为卷挂载或环境变量使用 - Secret :存储敏感数据(如密码、令牌),数据是Base64编码的。
# 创建Secret kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password='S!B\*d$zDsb='
6.3 数据持久化:PersistentVolume (PV) 与 PersistentVolumeClaim (PVC) 容器内数据默认是临时的,需要持久化存储。
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
在Deployment的Pod模板中,可以引用这个PVC,将存储卷挂载到容器内的特定路径。
6.4 应用健康检查:Liveness与Readiness Probe 确保K8S能准确判断应用状态。
# 在容器spec中添加
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
7. 常见问题与排查方法
学习过程中,你几乎一定会遇到下面这些问题。这里提供快速排查思路。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Docker启动失败 | 1. 虚拟化未开启(Windows/Mac)。 2. 端口冲突。 3. 驱动问题。 | 1. 查看Docker Desktop日志。 2. Windows检查Hyper-V或WSL2状态。 3. Linux执行 sudo systemctl status docker 和 journalctl -xe 。 | 1. 进入BIOS开启VT-x/AMD-V。 2. 关闭占用2375等端口的程序。 3. 重装或更新驱动。 |
kubeadm init 卡住或失败 | 1. 镜像拉取失败(网络问题)。 2. 端口被占用(6443, 10250等)。 3. 系统配置不满足(Swap未关,cgroup驱动不一致)。 | 1. 查看 kubeadm init 的具体报错信息。 2. 使用 sudo kubeadm reset 清理后,按提示检查。 3. 执行 kubeadm config images pull 预拉镜像。 | 1. 配置镜像加速器或手动拉取镜像。 2. 使用 netstat 检查端口,关闭冲突服务。 3. 确保完成 3.4 关键检查点 的所有步骤。 |
Pod一直处于 Pending 状态 | 1. 资源不足(CPU/内存)。 2. 没有满足条件的节点(NodeSelector/Taint)。 3. PVC无法绑定PV。 | kubectl describe pod <pod-name> 查看 Events 部分。 | 1. 检查节点资源 kubectl describe node 。 2. 检查Pod的调度约束。 3. 检查PVC状态 kubectl get pvc 。 |
Pod处于 CrashLoopBackOff 状态 | 1. 应用本身启动失败。 2. 配置错误(如错误的环境变量)。 3. 依赖服务未就绪。 | 1. kubectl logs <pod-name> 查看应用日志。 2. kubectl describe pod <pod-name> 查看详情。 3. 检查应用配置文件。 | 1. 根据日志修复应用代码或配置。 2. 检查ConfigMap/Secret是否正确挂载。 3. 确保依赖服务(如数据库)先启动。 |
| Service无法访问(NodePort) | 1. NodePort端口范围(默认30000-32767)被防火墙拦截。 2. Pod的 selector 与Service不匹配。 3. Pod本身没有监听目标端口。 | 1. kubectl get svc 确认端口。 2. kubectl get endpoints <svc-name> 检查Endpoint列表是否为空。 3. 在节点上使用 curl 测试集群内访问。 | 1. 开放防火墙的NodePort端口范围。 2. 确保Service的 selector 与Pod的 label 一致。 3. 进入Pod检查应用是否在目标端口监听。 |
K8S节点 NotReady | 1. 网络插件(如Flannel)未正常运行。 2. kubelet 服务停止。 3. 节点资源耗尽。 | 1. kubectl get pods -n kube-system 查看网络插件Pod状态。 2. sudo systemctl status kubelet 查看服务状态。 3. kubectl describe node <node-name> 。 | 1. 重新应用网络插件YAML文件。 2. 重启 kubelet : sudo systemctl restart kubelet 。 3. 清理节点资源或扩容。 |
| Java应用在K8S中启动报错 | 可能涉及模块化Java(Java 9+)的反射访问限制。 | 查看应用日志,常见错误与 illegal reflective access 或 --add-opens 相关。 | 在Deployment的容器启动命令中添加JVM参数,例如: java --add-opens java.base/java.lang=ALL-UNNAMED -jar your-app.jar |
8. 从学习到生产:最佳实践与进阶方向
当你完成了基础教程的练习,下一步是思考如何将这些知识用于更实际的场景。
8.1 学习环境最佳实践
- 使用版本控制 :将所有K8S的YAML文件放入Git仓库,便于管理和回滚。
- 命名空间隔离 :为不同的练习项目创建独立的命名空间(
kubectl create namespace my-project),避免资源混乱。 - 善用
kubectl explain:忘记某个资源字段的含义时,使用kubectl explain deployment.spec.template.spec.containers等命令查看官方文档。 - 清理资源 :练习后,使用
kubectl delete -f .(在YAML文件目录)或按命名空间删除资源,保持环境整洁。
8.2 向生产环境过渡的思考
- 高可用集群 :学习使用
kubeadm或其它工具(如kops, RKE)搭建多Master节点集群。 - Ingress Controller :代替NodePort,使用Nginx Ingress或Traefik管理外部访问,实现域名路由和SSL终止。
- 持久化存储 :对接云厂商的块存储(如AWS EBS, Azure Disk)或使用分布式存储方案(如Ceph, Longhorn)。
- 配置与密钥管理 :考虑使用HashiCorp Vault等专业工具管理Secret,而非直接存储在YAML中。
- 监控与日志 :集成Prometheus + Grafana进行监控,使用EFK(Elasticsearch, Fluentd, Kibana)或Loki收集日志。
- 安全 :配置Pod安全策略(PSP)或Pod安全标准(PSS),使用网络策略(NetworkPolicy)控制Pod间流量,启用RBAC进行权限控制。
8.3 结合热门方向:AI运维与云原生 教程中打下的基础,是进入更前沿领域的跳板:
- AI应用部署 :学习如何将机器学习模型(如TensorFlow Serving、PyTorch模型)打包成Docker镜像,并通过K8S Deployment和Service进行部署,利用HPA(Horizontal Pod Autoscaler)根据流量自动扩缩容。
- GitOps :了解ArgoCD或Flux,实现通过Git仓库声明应用状态,自动同步到K8S集群。
- 服务网格 :初步了解Istio或Linkerd,用于管理微服务间的通信、可观测性和安全。
- Serverless :在K8S上体验Knative或OpenFaaS,构建事件驱动的无服务器应用。
这套“零基础入门到实战”教程的价值,在于它提供了一个经过验证的、可复现的动手路径。它帮你绕开了大量初次接触时的环境配置陷阱,让你能把精力集中在核心概念和操作逻辑上。最应该先验证的,就是Docker的“镜像-容器”基本操作和K8S的“Deployment-Service-Pod”核心工作流。最容易踩的坑几乎都集中在环境预处理(关Swap、配镜像源、解决网络插件)和YAML文件编写的语法细节上。
下一步,你可以选择一个自己熟悉的简单应用(比如一个Python Flask API或一个静态网站),尝试独立完成从编写Dockerfile构建镜像,到编写K8S YAML文件将其部署上线的全过程。这个完整的闭环实践,会比任何理论都更能巩固你的理解。建议将本文提及的命令、YAML示例和排查表格收藏备用,它们在你未来搭建测试环境或排查问题时会很实用。
更多推荐

所有评论(0)