首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >最新 Docker 与 Kubernetes 实操指南:全面掌握容器化方案从入门到精通

最新 Docker 与 Kubernetes 实操指南:全面掌握容器化方案从入门到精通

原创
作者头像
啦啦啦191
发布2025-08-09 11:02:35
发布2025-08-09 11:02:35
61300
代码可运行
举报
文章被收录于专栏:Java开发Java开发
运行总次数:0
代码可运行

Docker + Kubernetes 容器化方案最新实操指南

容器化技术已成为现代应用部署的标准方案,Docker 与 Kubernetes 的组合更是企业级应用的首选。本文基于 2025 年最新技术栈,提供从环境搭建到应用部署的完整实操指南,包含多架构支持、安全加固等最新特性。

一、环境准备(2025 最新版本)

1.1 安装 Docker Engine 27.0+

Docker 27.0 版本带来了对 containerd 2.0 的原生支持和多架构构建增强,安装步骤如下:

代码语言:bash
复制
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装最新版本 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证安装
sudo docker --version  # 应显示 Docker Engine - Community 27.0.x

配置 Docker 以非 root 用户运行(安全最佳实践):

代码语言:bash
复制
sudo usermod -aG docker $USER
newgrp docker  # 无需重启即可生效

1.2 部署 Kubernetes 1.30 集群

使用 kubeadm 部署最新稳定版 K8s 1.30,支持容器运行时接口(CRI)v1:

代码语言:bash
复制
# 关闭 swap
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab

# 安装容器运行时(containerd 2.0)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
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
sudo apt-get update
sudo apt-get install containerd.io

# 配置 containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo systemctl restart containerd

# 安装 kubeadm、kubelet、kubectl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/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=1.30.0-00 kubeadm=1.30.0-00 kubectl=1.30.0-00
sudo apt-mark hold kubelet kubeadm kubectl

# 初始化控制平面(仅在主节点执行)
sudo kubeadm init --kubernetes-version=1.30.0 --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

# 安装网络插件(Calico 3.28)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml

# (可选)如果是单节点集群,允许控制平面调度 Pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

验证集群状态:

代码语言:bash
复制
kubectl get nodes  # 应显示 Ready 状态
kubectl get pods -n kube-system  # 所有系统组件应正常运行

二、构建多架构 Docker 镜像(2025 新特性)

Docker 27 增强了对 ARM64 和 AMD64 混合架构的支持,以下是构建多架构镜像的实操步骤:

2.1 准备应用代码

以一个简单的 Node.js 应用为例,目录结构如下:

代码语言:txt
复制
node-app/
├── app.js
├── package.json
└── Dockerfile

app.js 内容:

代码语言:javascript
代码运行次数:0
运行
复制
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.json({ 
    message: 'Hello from Kubernetes!',
    node: process.env.NODE_NAME,
    timestamp: new Date().toISOString()
  });
});

app.listen(port, () => {
  console.log(`App running on port ${port}`);
});

package.json 内容:

代码语言:json
复制
{
  "name": "k8s-demo-app",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.19.2"
  },
  "scripts": {
    "start": "node app.js"
  }
}

2.2 编写 Dockerfile(多阶段构建)

代码语言:dockerfile
复制
# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json./
RUN npm ci --only=production

# 运行阶段
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/node_modules./node_modules
COPY app.js.
ENV PORT=3000
USER node  # 非 root 用户运行,增强安全性
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s \
  CMD wget -q -O /dev/null http://localhost:3000/ || exit 1
CMD ["node", "app.js"]

这个 Dockerfile 包含以下现代特性:

  • 多阶段构建:减小最终镜像体积
  • 非 root 用户运行:遵循最小权限原则
  • 健康检查:让容器编排系统能检测应用状态
  • 使用 Alpine 基础镜像:进一步减小镜像大小

2.3 构建并推送多架构镜像

代码语言:bash
复制
# 创建构建器实例
docker buildx create --name mybuilder --use

# 登录 Docker Hub(或私有仓库)
docker login

# 构建并推送多架构镜像(amd64 + arm64)
docker buildx build --platform linux/amd64,linux/arm64 \
  -t yourusername/node-demo:latest \
  --push.

验证镜像:

代码语言:bash
复制
docker buildx imagetools inspect yourusername/node-demo:latest

三、Kubernetes 部署与配置(1.30 新特性)

3.1 部署应用(使用 Deployment)

创建 deployment.yaml

代码语言:yaml
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-demo
  labels:
    app: node-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: node-demo
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: node-demo
    spec:
      containers:
      - name: node-demo
        image: yourusername/node-demo:latest
        ports:
        - containerPort: 3000
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
          limits:
            cpu: "500m"
            memory: "256Mi"
        readinessProbe:
          httpGet:
            path: /
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /
            port: 3000
          initialDelaySeconds: 15
          periodSeconds: 20
      securityContext:
        runAsUser: 1000
        runAsGroup: 3000
        fsGroup: 2000

应用部署:

代码语言:bash
复制
kubectl apply -f deployment.yaml

# 查看部署状态
kubectl get deployments
kubectl get pods -o wide

配置说明:

  • 滚动更新策略:确保零停机更新
  • 资源请求与限制:防止资源争用
  • 就绪探针与存活探针:确保流量只发送到健康的Pod
  • 安全上下文:限制容器权限

3.2 暴露服务(使用 Service 和 Ingress)

创建 service.yaml

代码语言:yaml
复制
apiVersion: v1
kind: Service
metadata:
  name: node-demo-service
spec:
  selector:
    app: node-demo
  ports:
  - port: 80
    targetPort: 3000
  type: ClusterIP

部署 Service:

代码语言:bash
复制
kubectl apply -f service.yaml

对于外部访问,使用最新的 Ingress-NGINX 控制器(1.10+):

代码语言:bash
复制
# 安装 Ingress-NGINX
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml

# 创建 Ingress 资源
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: node-demo-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  ingressClassName: nginx
  rules:
  - host: demo.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: node-demo-service
            port:
              number: 80
EOF

获取 Ingress 地址:

代码语言:bash
复制
kubectl get ingress node-demo-ingress

四、高级操作与监控

4.1 使用 Kustomize 管理配置(替代 Helm 的轻量方案)

创建 kustomization.yaml

代码语言:yaml
复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- ingress.yaml

# 可以根据环境覆盖配置
patches:
- path: patch-replicas.yaml  # 例如生产环境增加副本数

应用配置:

代码语言:bash
复制
kubectl apply -k.

4.2 监控与日志(使用 Prometheus + Grafana)

代码语言:bash
复制
# 安装 Prometheus 和 Grafana(使用 kube-prometheus-stack)
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace

访问 Grafana 仪表板:

代码语言:bash
复制
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80

五、安全最佳实践(2025 最新指南)

  1. 镜像安全扫描
代码语言:bash
复制
# 使用 Docker Scout 扫描镜像漏洞
docker scout cves yourusername/node-demo:latest
  1. 启用 Pod Security Standards
代码语言:yaml
复制
# 在 Namespace 中应用限制
apiVersion: v1
kind: Namespace
metadata:
  name: my-app-namespace
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted
  1. 使用 Secret 管理敏感信息
代码语言:bash
复制
# 创建 Secret
kubectl create secret generic app-secrets --from-literal=DB_PASSWORD=strongpassword

# 在 Deployment 中引用
#...
env:
- name: DB_PASSWORD
  valueFrom:
    secretKeyRef:
      name: app-secrets
      key: DB_PASSWORD
#...

六、总结

本文基于 2025 年最新版本的 Docker 27 和 Kubernetes 1.30,提供了从环境搭建到应用部署的完整实操指南。通过多架构镜像构建、安全加固配置和现代化部署策略,你可以构建一个高效、安全、可扩展的容器化平台。

随着容器技术的不断发展,建议定期关注官方文档以获取最新特性和最佳实践。Docker 和 Kubernetes 生态系统正持续演进,新的工具和功能不断涌现,将进一步简化容器化应用的管理和运维。


Docker,Kubernetes, 容器化,实操指南,容器技术入门,容器化方案,从入门到精通,镜像构建,Pod 配置,服务发现,负载均衡,自动化部署,监控日志,云原生应用,容器编排

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker + Kubernetes 容器化方案最新实操指南
    • 一、环境准备(2025 最新版本)
      • 1.1 安装 Docker Engine 27.0+
      • 1.2 部署 Kubernetes 1.30 集群
    • 二、构建多架构 Docker 镜像(2025 新特性)
      • 2.1 准备应用代码
      • 2.2 编写 Dockerfile(多阶段构建)
      • 2.3 构建并推送多架构镜像
    • 三、Kubernetes 部署与配置(1.30 新特性)
      • 3.1 部署应用(使用 Deployment)
      • 3.2 暴露服务(使用 Service 和 Ingress)
    • 四、高级操作与监控
      • 4.1 使用 Kustomize 管理配置(替代 Helm 的轻量方案)
      • 4.2 监控与日志(使用 Prometheus + Grafana)
    • 五、安全最佳实践(2025 最新指南)
    • 六、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档