Docker与K8s实战:从零构建容器化应用部署与编排

最近两年,云计算和容器化技术已经从“加分项”变成了后端和运维工程师的“生存技能”。很多朋友想学,但一看到 Docker、K8s 那一堆概念和命令就头疼:镜像、容器、Pod、Service、Ingress…… 网上的教程要么太浅,只教几个命令;要么太深,直接从源码讲起,学完还是不知道怎么用到实际项目里。

这篇文章要解决的,就是这个问题。它不是一个简单的命令手册,而是一套从零到一的实战路径。我会带你理解,为什么在 2026 年的今天,掌握 Docker 和 K8s 依然是构建现代应用交付能力的核心;更重要的是,我会把这两个看似庞大的技术栈,拆解成一个个可执行、可验证的模块,让你在本地就能搭建一个微缩的“生产环境”,亲身体验从代码打包、部署到扩缩容、服务发现的完整流程。

如果你符合以下任何一种情况,这篇文章就是为你写的:

  1. 后端开发,想摆脱“本地能跑,上线就崩”的困境,让应用环境标准化。
  2. 运维或 DevOps 工程师,需要系统掌握容器编排,而不仅仅是会用几个 kubectl 命令。
  3. 技术负责人或架构师,正在评估或推进团队的技术栈容器化改造。
  4. 学生或转行者,希望获得一份能写进简历的、有深度的实战项目经验。

我们不会空谈概念,而是通过一个完整的 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 核心运行环境

  1. 操作系统 Linux (Ubuntu 22.04 LTS 或 CentOS Stream 9) macOS 。Windows 用户强烈建议使用 WSL 2 (Windows Subsystem for Linux) ,并安装 Ubuntu 发行版。纯 Windows Docker Desktop 环境在涉及 Linux 特有操作时可能会遇到兼容性问题。
  2. Docker :版本 24.x 或更高。Docker 已经将 docker-compose 功能集成到 CLI 中,我们主要使用 docker 命令。
  3. Kubernetes :对于本地学习和开发,我们使用 Minikube Kind (Kubernetes in Docker) 。它们都能在单机上快速启动一个功能完整的 K8s 集群。本文以 Minikube 为例,因为它对新手更友好,集成功能更多。
  4. 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=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值