容器与编排基础
问题
Docker 和 Kubernetes 的核心概念是什么?前端需要了解哪些?
答案
Docker 核心概念
| 概念 | 说明 |
|---|---|
| Image(镜像) | 只读模板,包含运行环境和代码 |
| Container(容器) | 镜像的运行实例 |
| Dockerfile | 构建镜像的脚本 |
| Docker Compose | 编排多个容器的工具 |
前端项目 Dockerfile
Dockerfile
# 多阶段构建
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
FROM nginx:alpine AS runner
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
K8s 核心概念
| 概念 | 说明 | 类比 |
|---|---|---|
| Pod | 最小部署单元(一个或多个容器) | 一个进程 |
| Service | Pod 的网络抽象(负载均衡) | Nginx upstream |
| Deployment | 管理 Pod 的副本集 | PM2 cluster |
| Ingress | 外部流量入口 | Nginx server |
| ConfigMap/Secret | 配置和密钥管理 | .env 文件 |
常用 Docker 命令
# 构建镜像
docker build -t my-app:latest .
# 运行容器
docker run -d -p 80:80 --name my-app my-app:latest
# 查看容器
docker ps
docker logs my-app
# Docker Compose
docker compose up -d # 启动所有服务
docker compose down # 停止所有服务
docker compose logs -f # 查看日志
常见面试问题
Q1: Docker 和虚拟机的区别?
答案:
| 维度 | Docker | 虚拟机 |
|---|---|---|
| 隔离级别 | 进程级(共享内核) | 系统级(独立内核) |
| 启动速度 | 秒级 | 分钟级 |
| 资源开销 | 极小 | 大(需要完整 OS) |
| 镜像大小 | MB 级 | GB 级 |
Q2: 多阶段构建有什么好处?
答案:
减小最终镜像体积。构建阶段需要 Node.js、npm 等工具(上百 MB),但运行阶段只需要 Nginx + 静态文件(几十 MB)。
Q3: 前端工程师需要了解 K8s 吗?
答案:
基本概念需要了解,因为:
- CI/CD 部署通常基于 K8s
- 需要理解 Pod、Service 概念来排查问题
- 环境变量注入依赖 ConfigMap
- 日志查看需要 kubectl 基本操作
Q4: 如何实现容器的健康检查?
答案:
# K8s 健康检查
livenessProbe: # 存活检查,失败则重启
httpGet:
path: /health
port: 3000
periodSeconds: 10
readinessProbe: # 就绪检查,失败则不接收流量
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
相关链接
- Docker 与容器化 - Docker 详解
- Kubernetes 基础 - K8s 详细教程
- CI/CD 与自动化部署 - CI/CD 中的 Docker