如何使用 Docker 和 Kubernetes 部署应用程序

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面教程为开发者和 IT 专业人员提供了一份实用指南,帮助他们理解和实施容器技术。通过探索容器基础、Docker 安装以及 Kubernetes 部署策略,学习者将获得现代软件打包和分发技术的实践技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/CoreConceptsGroup(["Core Concepts"]) kubernetes(("Kubernetes")) -.-> kubernetes/ClusterInformationGroup(["Cluster Information"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/CoreConceptsGroup -.-> kubernetes/architecture("Architecture") kubernetes/ClusterInformationGroup -.-> kubernetes/cluster_info("Cluster Info") subgraph Lab Skills kubernetes/get -.-> lab-392975{{"如何使用 Docker 和 Kubernetes 部署应用程序"}} kubernetes/create -.-> lab-392975{{"如何使用 Docker 和 Kubernetes 部署应用程序"}} kubernetes/run -.-> lab-392975{{"如何使用 Docker 和 Kubernetes 部署应用程序"}} kubernetes/architecture -.-> lab-392975{{"如何使用 Docker 和 Kubernetes 部署应用程序"}} kubernetes/cluster_info -.-> lab-392975{{"如何使用 Docker 和 Kubernetes 部署应用程序"}} end

容器基础

什么是容器?

容器是轻量级、独立的可执行包,其中包含运行一段软件所需的一切,包括代码、运行时环境、系统工具、库和设置。作为核心容器技术,它们在不同的计算环境中提供一致且高效的应用程序虚拟化。

关键容器概念

概念 描述
隔离 容器在隔离的用户空间中运行
可移植性 可以在不同平台上一致地运行
效率 与传统虚拟机相比更轻量级

在 Ubuntu 22.04 上安装 Docker

## 更新软件包索引
sudo apt update

## 安装依赖项
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## 添加 Docker 的官方 GPG 密钥
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## 设置稳定存储库
echo "deb [arch=$(dpatch -s)]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## 安装 Docker 引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

基本 Docker 命令

## 拉取镜像
docker pull ubuntu:latest

## 列出镜像
docker images

## 运行容器
docker run -it ubuntu:latest /bin/bash

## 列出正在运行的容器
docker ps

## 停止容器
docker stop [容器ID]

容器工作流程可视化

graph TD A[开发者编写代码] --> B[创建 Dockerfile] B --> C[构建容器镜像] C --> D[推送到容器注册表] D --> E[部署容器] E --> F[运行应用程序]

容器用例

容器在各种场景下的软件打包和部署中表现出色:

  • 微服务架构
  • 持续集成/部署
  • 云原生应用程序
  • 开发和测试环境

Kubernetes 部署

Kubernetes 架构概述

Kubernetes 是一个强大的容器编排平台,旨在跨集群自动执行容器化应用程序的部署、扩展和管理。

Kubernetes 核心组件

组件 功能
主节点 管理集群操作
工作节点 运行容器化应用程序
API 服务器 中央控制枢纽
调度器 将工作负载分配到节点
etcd 分布式键值存储

在 Ubuntu 22.04 上安装 Kubernetes

## 更新系统软件包
sudo apt update

## 安装所需依赖项
sudo apt install -y curl apt-transport-https

## 添加 Kubernetes 存储库
curl -s | sudo apt-key add -
echo "deb  kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

## 安装 Kubernetes 组件
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

基本部署配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Kubernetes 集群初始化

## 初始化 Kubernetes 主节点
sudo kubeadm init --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

集群管理工作流程

graph TD A[创建部署] --> B[调度容器] B --> C[分配到节点] C --> D[监控健康状态] D --> E[自动扩展/恢复]

扩展部署

## 将部署扩展到 5 个副本
kubectl scale deployment nginx-deployment --replicas=5

## 检查部署状态
kubectl get deployments

关键部署策略

  • 滚动更新
  • 金丝雀部署
  • 蓝绿部署
  • 水平 Pod 自动缩放

容器生态系统

生态系统组件与交互

容器生态系统代表了一个全面的工具、平台和技术网络,用于支持容器化应用程序的开发、部署和管理。

关键生态系统工具

工具 用途 类别
Docker 容器运行时 虚拟化
Kubernetes 编排 集群管理
Prometheus 监控 可观测性
Grafana 可视化 指标仪表板
Helm 包管理 部署

容器安全最佳实践

## 安装 Docker 安全扫描工具
docker scan --help

## 漏洞扫描
docker scan nginx:latest

## 镜像签名
docker trust sign myimage:latest

监控架构

graph TD A[容器运行时] --> B[指标收集] B --> C[监控平台] C --> D[警报系统] D --> E[自动响应]

日志记录与可观测性

## 收集容器日志
docker logs [容器ID]

## 实时日志监控
kubectl logs -f deployment/myapp

高级部署策略

apiVersion: apps/v1
kind: Deployment
metadata:
  name: advanced-deployment
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%

容器注册表管理

## 登录到容器注册表
docker login registry.example.com

## 将镜像推送到私有注册表
docker push registry.example.com/myimage:v1.0

安全扫描工作流程

graph LR A[代码提交] --> B[构建镜像] B --> C[漏洞扫描] C --> D{扫描通过?} D -->|是| E[部署] D -->|否| F[阻止部署]

性能优化技术

  • 最小化基础镜像
  • 多阶段构建
  • 资源限制
  • 缓存策略

总结

容器代表了一种革命性的软件部署方法,提供了前所未有的可移植性、效率和可扩展性。通过本教程,读者已经掌握了 Docker 容器管理、Kubernetes 架构以及在各种计算环境中构建云原生应用程序的最佳实践等关键技能。