阿里云轻量 2核2G 38元/年起 · 新客秒杀限量 去看看

Docker与Kubernetes云端部署实战指南

WeHosts技术团队·2026年3月26日

快速结论

  • Docker:开发测试环境首选,解决"在我机器上能跑"的问题
  • K8s托管服务:生产环境用阿里云ACK或腾讯云TKE,不用自己维护Master节点
  • 起步门槛:单机用Docker Compose,3台机器以上考虑K8s
  • 成本参考:2节点K8s集群(4核8G)约600元/月起

Docker基础:为什么要容器化

传统部署的痛点:

  • 开发环境:Mac + Node 20 + MySQL 8.0
  • 测试环境:Ubuntu + Node 18 + MySQL 5.7
  • 生产环境:CentOS + Node 16 + MySQL 5.7
  • 结果:环境不一致导致"在我机器上能跑"

Docker通过将应用和依赖打包成镜像,实现一次构建,到处运行。


Dockerfile最佳实践

基础Dockerfile(Node.js)

# 使用官方轻量基础镜像
FROM node:20-alpine AS builder

# 设置工作目录
WORKDIR /app

# 先复制依赖文件(利用Docker层缓存)
COPY package*.json ./
RUN npm ci --only=production

# 复制源码
COPY . .

# 构建阶段(如有)
RUN npm run build

# 生产运行阶段(多阶段构建,减小镜像体积)
FROM node:20-alpine AS runner
WORKDIR /app

# 创建非root用户(安全最佳实践)
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nextjs -u 1001

COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json .

USER nextjs
EXPOSE 3000

CMD ["node", "dist/index.js"]

优化要点:

  1. 使用Alpine镜像减小体积(node:20 -> 1GB,node:20-alpine -> 180MB)
  2. 多阶段构建,生产镜像不包含构建工具
  3. 依赖层在源码层之前,利用缓存加速构建
  4. 非root用户运行,提升安全性

Docker Compose本地开发环境

# docker-compose.yml
version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
      - REDIS_URL=redis://cache:6379
    volumes:
      - ./src:/app/src  # 热重载
    depends_on:
      - db
      - cache

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:

Kubernetes核心概念

K8s的学习曲线较陡,但掌握这几个核心概念就能处理大多数场景:

Pod:最小部署单元

Pod是K8s中最小的可部署单元,包含一个或多个容器。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: myapp
      image: registry.cn-hangzhou.aliyuncs.com/myorg/myapp:v1.0
      ports:
        - containerPort: 3000
      resources:
        requests:
          memory: "128Mi"
          cpu: "100m"
        limits:
          memory: "256Mi"
          cpu: "500m"

Deployment:管理Pod副本

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3  # 3个副本
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: registry.cn-hangzhou.aliyuncs.com/myorg/myapp:v1.0
          ports:
            - containerPort: 3000
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1        # 滚动更新时最多多出1个Pod
      maxUnavailable: 0  # 更新时不允许有不可用的Pod

Service:服务发现和负载均衡

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: LoadBalancer  # 创建云厂商负载均衡器,暴露到公网

ConfigMap和Secret:配置管理

# 非敏感配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  APP_ENV: "production"
  LOG_LEVEL: "info"

---
# 敏感配置(Base64编码)
apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret
type: Opaque
data:
  DATABASE_PASSWORD: cGFzc3dvcmQ=  # "password"的Base64

云端K8s托管服务选型

阿里云ACK(容器服务Kubernetes版)

优势:

  • 国内最成熟的K8s托管服务
  • 与阿里云生态深度整合(OSS、RDS、SLB、ACR)
  • 支持自动弹性伸缩(KEDA、Virtual Node)
  • 免费Master节点,只为Worker节点付费

规格参考(2026年):

配置月费用适合场景
2×ecs.c6.large(2核4G)≈400元开发/测试
3×ecs.c6.xlarge(4核8G)≈900元小型生产
5×ecs.c6.2xlarge(8核16G)≈2500元中型生产

查看阿里云ACK优惠

快速创建集群:

# 安装aliyun CLI
pip install aliyun-python-sdk-core

# 创建K8s集群(示例)
aliyun cs CreateCluster \
  --name my-k8s-cluster \
  --cluster-type ManagedKubernetes \
  --region cn-hangzhou \
  --kubernetes-version 1.29.0

腾讯云TKE(容器服务)

优势:

  • 与腾讯云CLB(负载均衡)、CBS(云盘)无缝集成
  • 超级节点(Serverless容器):按Pod使用量计费,无需预置节点
  • 与微信企业版生态整合(容器日志直推CLS)

超级节点(推荐中小团队):

  • 按实际Pod运行时间和资源计费
  • 不需要预置EC实例,节省低峰期费用
  • 适合流量波动大的业务

查看腾讯云TKE优惠

华为云CCE(云容器引擎)

优势:

  • 鲲鹏架构支持(ARM64)
  • 政企合规认证完善
  • CCE Turbo极速Pod启动(<3秒)

查看华为云CCE


生产部署实战:完整流程

第一步:推送镜像到私有仓库

# 登录阿里云容器镜像服务
docker login --username=your-account registry.cn-hangzhou.aliyuncs.com

# 构建并推送
docker build -t myapp:v1.0 .
docker tag myapp:v1.0 registry.cn-hangzhou.aliyuncs.com/myorg/myapp:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/myorg/myapp:v1.0

第二步:配置kubectl连接集群

# 从阿里云控制台下载kubeconfig
# 或使用aliyun CLI
aliyun cs DescribeClusterUserKubeconfig --ClusterId cf123xxx > ~/.kube/config

# 验证连接
kubectl get nodes

第三步:部署应用

# 应用所有配置
kubectl apply -f deployment.yml
kubectl apply -f service.yml

# 查看部署状态
kubectl rollout status deployment/myapp

# 查看Pod运行情况
kubectl get pods -l app=myapp

# 查看日志
kubectl logs -l app=myapp --tail=100 -f

第四步:配置Ingress(HTTPS访问)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
    - hosts:
        - api.yourdomain.com
      secretName: tls-secret
  rules:
    - host: api.yourdomain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp-service
                port:
                  number: 80

推荐方案

个人开发者:Docker + Docker Compose,本地开发够用

小团队(<5人):腾讯云TKE超级节点,按量付费,无需运维K8s

成长型团队:阿里云ACK托管K8s,成熟稳定,生态完整

政企用户:华为云CCE,合规认证齐全

容器化不只是技术升级,更是团队协作方式的升级。拥抱容器,拥抱现代云原生。


站内延伸阅读:容器技术选型:什么时候不该上 K8s

本文可能含联盟推广链接,购买不增加你的价格,详见联盟披露。

文中提到的云平台当前活动价

文中价格均来自各平台公开活动页。想直接对比在售机型,可以先看下面这些:价格核实日期与台账一致,以活动页为准。