这次我们来看一套面向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. 适用场景与使用边界

这套教程主要适合以下几类人群:

  1. 运维新手/转行人员 :希望快速进入云计算、运维领域,掌握当前企业最主流的容器化技术栈。
  2. 开发人员 :需要将应用(如Spring Boot、Python Web、Node.js应用)进行容器化打包,并了解基本的K8S部署流程。
  3. 学生或爱好者 :对云原生技术感兴趣,希望通过一套结构化的实战材料入门。
  4. 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之前,请先完成以下检查:

  1. 关闭防火墙与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
    
  2. 关闭Swap :Kubernetes 1.8+要求禁用Swap以保证kubelet正常工作。
    sudo swapoff -a
    # 永久禁用,编辑 /etc/fstab,注释掉包含swap的行
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
  3. 配置主机名与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能拉取镜像、运行容器、进行基本生命周期管理。
  • 操作步骤 :
    1. 拉取一个Nginx镜像并运行。
      sudo docker pull nginx:alpine
      sudo docker run -d --name my-nginx -p 8080:80 nginx:alpine
      
    2. 检查容器状态。
      sudo docker ps
      
    3. 访问服务。在浏览器打开 http://<你的服务器IP>:8080 ,应看到Nginx欢迎页。
    4. 进入容器内部。
      sudo docker exec -it my-nginx /bin/sh
      # 在容器内执行命令,如 ls /
      exit
      
    5. 停止并删除容器。
      sudo docker stop my-nginx
      sudo docker rm my-nginx
      

5.2 Kubernetes 核心功能验证

  • 测试目的 :验证K8S集群能调度Pod、提供服务发现、进行基本的扩缩容。
  • 操作步骤 :
    1. 部署一个简单的应用 。
      # 创建一个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
      
    2. 查看资源状态 。
      kubectl get deployments
      kubectl get pods
      kubectl get svc nginx-svc
      
      观察Pod是否变为 Running ,并记录 nginx-svc 的 NodePort (如 80:3xxxx/TCP 中的 3xxxx )。
    3. 访问应用 。使用Master或任意Node的IP地址,加上上面记录的NodePort端口,在浏览器中访问,应看到Nginx页面。
    4. 测试扩缩容 。
      kubectl scale deployment nginx-deploy --replicas=5
      kubectl get pods # 观察Pod数量变为5个
      kubectl scale deployment nginx-deploy --replicas=1
      kubectl get pods # 观察Pod数量缩回1个
      
    5. 清理测试资源 。
      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 学习环境最佳实践

  1. 使用版本控制 :将所有K8S的YAML文件放入Git仓库,便于管理和回滚。
  2. 命名空间隔离 :为不同的练习项目创建独立的命名空间( kubectl create namespace my-project ),避免资源混乱。
  3. 善用 kubectl explain :忘记某个资源字段的含义时,使用 kubectl explain deployment.spec.template.spec.containers 等命令查看官方文档。
  4. 清理资源 :练习后,使用 kubectl delete -f . (在YAML文件目录)或按命名空间删除资源,保持环境整洁。

8.2 向生产环境过渡的思考

  1. 高可用集群 :学习使用 kubeadm 或其它工具(如kops, RKE)搭建多Master节点集群。
  2. Ingress Controller :代替NodePort,使用Nginx Ingress或Traefik管理外部访问,实现域名路由和SSL终止。
  3. 持久化存储 :对接云厂商的块存储(如AWS EBS, Azure Disk)或使用分布式存储方案(如Ceph, Longhorn)。
  4. 配置与密钥管理 :考虑使用HashiCorp Vault等专业工具管理Secret,而非直接存储在YAML中。
  5. 监控与日志 :集成Prometheus + Grafana进行监控,使用EFK(Elasticsearch, Fluentd, Kibana)或Loki收集日志。
  6. 安全 :配置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示例和排查表格收藏备用,它们在你未来搭建测试环境或排查问题时会很实用。

更多推荐