最近两年,云计算和容器化技术已经从“加分项”变成了后端和运维工程师的“生存技能”。很多朋友想学,但一看到 Docker、K8s 那一堆概念和命令就头疼:镜像、容器、Pod、Service、Ingress…… 网上的教程要么太浅,只教几个命令;要么太深,直接从源码讲起,学完还是不知道怎么用到实际项目里。
这篇文章要解决的,就是这个问题。它不是一个简单的命令手册,而是一套从零到一的实战路径。我会带你理解,为什么在 2026 年的今天,掌握 Docker 和 K8s 依然是构建现代应用交付能力的核心;更重要的是,我会把这两个看似庞大的技术栈,拆解成一个个可执行、可验证的模块,让你在本地就能搭建一个微缩的“生产环境”,亲身体验从代码打包、部署到扩缩容、服务发现的完整流程。
如果你符合以下任何一种情况,这篇文章就是为你写的:
- 后端开发,想摆脱“本地能跑,上线就崩”的困境,让应用环境标准化。
- 运维或 DevOps 工程师,需要系统掌握容器编排,而不仅仅是会用几个
kubectl命令。 - 技术负责人或架构师,正在评估或推进团队的技术栈容器化改造。
- 学生或转行者,希望获得一份能写进简历的、有深度的实战项目经验。
我们不会空谈概念,而是通过一个完整的 Spring Boot 或 Python Flask 应用(你可以任选其一),完成从 Docker 化到 K8s 集群部署的全过程。过程中每一个步骤都有代码和配置,每一个决策点都会解释“为什么”。读完并跟着操作,你收获的将不仅仅是知识,而是一套可复用的工程能力。
1. 重新理解 Docker 与 K8s:解决什么问题,不解决什么问题
在动手之前,我们必须先统一认知:Docker 和 K8s 各自的核心价值是什么,以及它们如何分工协作。很多初学者会混淆两者的边界。
Docker 的核心是“封装”与“交付” 。它解决的是“环境一致性”问题。
- 没有 Docker 时 :开发在 Mac 上基于 Python 3.9 写好了代码,交给运维。运维在 CentOS 7 上用 Python 3.6 部署,结果一堆库不兼容,应用启动失败。经典的“在我机器上能跑”。
- 有了 Docker 后 :开发将应用代码、Python 3.9 解释器、所有依赖库,打包成一个不可变的“镜像”。这个镜像在任何安装了 Docker 的机器上(无论是开发机、测试机还是生产服务器),都能以完全一致的方式运行起来。它封装的是单个应用及其直接依赖。
Kubernetes (K8s) 的核心是“编排”与“管理” 。它解决的是“规模化运维”问题。
- 没有 K8s 时 :你手动在 10 台服务器上启动 Docker 容器,需要自己写脚本监控容器健康、处理某台服务器宕机后的容器迁移、配置容器间的网络通信和负载均衡。当应用有 100 个实例时,这几乎是不可能完成的任务。
- 有了 K8s 后 :你告诉 K8s:“我需要运行 5 个我的应用实例,并且它们需要能互相发现,对外通过一个域名提供服务。” K8s 会自动在集群中选择合适的节点创建容器(Pod),确保始终有 5 个健康的实例在运行,自动配置网络策略和服务发现。它管理的是成百上千个容器化应用的生命周期。
一个精辟的类比 :Docker 像是集装箱,它标准化了货物的包装方式(镜像),使得货物(应用)可以在轮船、火车、卡车(不同环境)间高效搬运。而 K8s 像是现代化的港口自动化调度系统,它决定哪些集装箱应该放在哪艘船的哪个位置(调度),如何高效装卸(生命周期管理),以及如何应对风暴导致某艘船延误(故障自愈)。
理解了这个分工,你就明白学习路径了:先学会用 Docker 把应用“装进集装箱”,再学会用 K8s 来“调度和管理整个港口的集装箱舰队”。
2. 环境准备:2026 年,我们用什么工具链?
工欲善其事,必先利其器。为了获得最佳的学习体验和贴近生产环境,我推荐以下工具链组合。这套组合在 2026 年依然是主流且稳定的选择。
2.1 核心运行环境
- 操作系统 : Linux (Ubuntu 22.04 LTS 或 CentOS Stream 9) 或 macOS 。Windows 用户强烈建议使用 WSL 2 (Windows Subsystem for Linux) ,并安装 Ubuntu 发行版。纯 Windows Docker Desktop 环境在涉及 Linux 特有操作时可能会遇到兼容性问题。
- Docker :版本 24.x 或更高。Docker 已经将
docker-compose功能集成到 CLI 中,我们主要使用docker命令。 - Kubernetes :对于本地学习和开发,我们使用 Minikube 或 Kind (Kubernetes in Docker) 。它们都能在单机上快速启动一个功能完整的 K8s 集群。本文以 Minikube 为例,因为它对新手更友好,集成功能更多。
- kubectl :K8s 的命令行管理工具,用于与任何 K8s 集群(包括 Minikube)交互。
2.2 安装与验证步骤
以下命令在 Ubuntu/WSL2 环境下执行。其他系统请参考对应官方文档。
步骤一:安装 Docker
# 1. 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2. 更新 apt 包索引并安装依赖
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
sudo usermod -aG docker $USER
# **重要**:执行此命令后,你需要**退出当前终端并重新登录**,或者重启系统,才能使组权限生效。
# 7. 验证安装
docker --version
# 预期输出:Docker version 24.0.7, build xxxxxxx
docker run hello-world
# 如果能成功运行并看到 Hello from Docker! 等信息,说明安装成功。
步骤二:安装 Minikube 和 kubectl
# 1. 安装 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
# 预期输出客户端版本信息
# 2. 安装 Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube version
# 预期输出 Minikube 版本信息
# 3. 启动 Minikube 集群(需要重新登录后,docker 权限生效)
# 这里使用 Docker 作为驱动,这是最方便的方式
minikube start --driver=docker
# 这个过程会下载 K8s 镜像,可能需要几分钟。
# 4. 验证集群状态
minikube status
# 预期输出:host, kubelet, apiserver 均为 Running
kubectl cluster-info
# 预期输出 Kubernetes control plane 和 CoreDNS 的地址
kubectl get nodes
# 预期输出一个名为 minikube 的节点,状态为 Ready
至此,你的本地学习环境已经就绪。我们有了 Docker(打包工具),有了一个单节点的 K8s 集群(Minikube),也有了管理集群的 kubectl (遥控器)。
3. 第一步实战:将你的应用 Docker 化
理论再好,不如一行代码。我们从一个简单的 Web 应用开始。你可以选择 Java (Spring Boot) 或 Python (Flask) 版本,原理相通。
3.1 示例应用代码
Python Flask 版 : 创建一个项目目录 docker-k8s-demo ,并在其中创建以下文件:
# app.py
from flask import Flask
import os
import socket
app = Flask(__name__)
@app.route('/')
def hello():
hostname = socket.gethostname()
return f'Hello from Docker & K8s! Container Hostname: {hostname}\n'
@app.route('/health')
def health():
return 'OK', 200
if __name__ == '__main__':
app.run(host=


2415

被折叠的 条评论
为什么被折叠?



