容器化部署是现代应用的标准做法。本文从 Docker 基础到 Kubernetes 生产部署,完整讲解容器化技术的实战应用。
Docker 基础
核心概念
- 镜像(Image):应用的静态定义
- 容器(Container):镜像的运行实例
- Dockerfile:镜像构建脚本
- Docker Compose:多容器编排
Dockerfile 示例
# Node.js 应用 Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
常用命令
# 构建镜像
docker build -t myapp:1.0 .
# 运行容器
docker run -d -p 3000:3000 myapp:1.0
# 查看运行中的容器
docker ps
# 查看日志
docker logs -f <container_id>
# 进入容器
docker exec -it <container_id> sh
Docker Compose
使用 Compose 管理多容器应用:
version: '3.8'
services:
web:
build: ./web
ports:
- "3000:3000"
depends_on:
- api
api:
build: ./api
environment:
- DB_HOST=db
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Kubernetes 入门
核心概念
- Pod:最小的部署单元
- Deployment:无状态应用部署
- Service:服务暴露
- Ingress:HTTP 路由
- ConfigMap / Secret:配置管理
Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: myapp:1.0
ports:
- containerPort: 3000
resources:
requests:
memory: "128Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"
Service 示例
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
type: LoadBalancer
selector:
app: web
ports:
- port: 80
targetPort: 3000
生产实践
健康检查
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
滚动更新
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
总结
Docker 和 Kubernetes 是现代应用部署的必备技能。从单体应用到微服务架构,掌握容器化部署能显著提升开发效率和系统可靠性。
深入学习推荐我们的付费课程《云原生实战:从Docker到Kubernetes》。