网站容器化部署 是通过 Docker 容器化应用、Kubernetes 编排管理、容器镜像仓库、自动化扩缩容,实现环境一致、快速部署、弹性伸缩的现代化部署方法。
为什么需要容器化?
传统部署问题
环境不一致:
❌ 开发环境正常,生产环境报错
❌ 依赖版本冲突
❌ 系统库差异
❌ 配置不一致
部署复杂:
❌ 手动配置多
❌ 部署步骤繁琐
❌ 容易出错
❌ 回滚困难
资源利用率低:
❌ 服务器资源浪费
❌ 扩缩容慢
❌ 隔离性差
❌ 迁移困难
容器化优势
环境一致:
✅ 一次构建,到处运行
✅ 环境完全一致
✅ 依赖打包
✅ 配置隔离
快速部署:
✅ 秒级启动
✅ 快速扩缩容
✅ 滚动更新
✅ 快速回滚
资源高效:
✅ 资源隔离
✅ 利用率高
✅ 弹性伸缩
✅ 成本降低
Docker 基础
核心概念 ⭐⭐⭐⭐⭐
镜像 (Image):
- 只读模板
- 包含应用和依赖
- 分层存储
- 可复用
容器 (Container):
- 镜像运行实例
- 隔离的运行环境
- 可启动/停止
- 临时或持久
Dockerfile:
- 镜像构建脚本
- 定义构建步骤
- 自动化构建
- 版本控制
Dockerfile 编写 ⭐⭐⭐⭐⭐
Node.js 应用:
# 基础镜像
FROM node:16-alpine
# 设置工作目录
WORKDIR /app
# 复制 package.json
COPY package*.json ./
# 安装依赖
RUN npm ci --only=production
# 复制应用代码
COPY . .
# 构建应用
RUN npm run build
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["node", "dist/server.js"]
PHP 应用:
FROM php:8.1-fpm
# 安装扩展
RUN docker-php-ext-install pdo pdo_mysql
# 安装 Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /var/www/html
# 复制代码
COPY . .
# 安装依赖
RUN composer install --no-dev --optimize-autoloader
# 设置权限
RUN chown -R www-data:www-data /var/www/html
# 暴露端口
EXPOSE 9000
CMD ["php-fpm"]
Python 应用:
FROM python:3.9-slim
WORKDIR /app
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制代码
COPY . .
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Docker 命令 ⭐⭐⭐⭐⭐
基础命令:
# 构建镜像
docker build -t myapp:1.0 .
# 运行容器
docker run -d -p 80:3000 --name myapp myapp:1.0
# 查看容器
docker ps
docker ps -a
# 查看日志
docker logs myapp
docker logs -f myapp
# 进入容器
docker exec -it myapp sh
# 停止容器
docker stop myapp
# 删除容器
docker rm myapp
# 删除镜像
docker rmi myapp:1.0
Docker Compose
多容器编排 ⭐⭐⭐⭐⭐
配置文件:
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "80:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://user:pass@db:5432/mydb
depends_on:
- db
volumes:
- ./logs:/app/logs
restart: unless-stopped
db:
image: postgres:13
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:6-alpine
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/nginx/ssl
depends_on:
- web
restart: unless-stopped
volumes:
postgres_data:
常用命令:
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看日志
docker-compose logs -f
# 重启服务
docker-compose restart
# 构建镜像
docker-compose build
# 查看状态
docker-compose ps
Kubernetes 基础
核心概念 ⭐⭐⭐⭐
Pod:
- 最小部署单元
- 包含一个或多个容器
- 共享网络和存储
- 短暂存在
Deployment:
- 管理 Pod 副本
- 滚动更新
- 自动扩缩容
- 自我修复
Service:
- 服务发现
- 负载均衡
- 稳定访问点
- 多种类型
Ingress:
- HTTP/HTTPS 路由
- 域名管理
- SSL 终止
- 外部访问
部署配置 ⭐⭐⭐⭐
Deployment 配置:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0
ports:
- containerPort: 3000
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
Service 配置:
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer
Ingress 配置:
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
tls:
- hosts:
- example.com
secretName: myapp-tls
容器镜像仓库
仓库选择 ⭐⭐⭐⭐
Docker Hub:
优势:
- 官方仓库
- 免费公开仓库
- 社区活跃
价格:
- 免费:有限制
- 付费:$5/月起
阿里云容器镜像:
优势:
- 国内访问快
- 免费额度
- 私有仓库
价格:
- 免费:基础版
- 付费:企业版
腾讯云容器镜像:
优势:
- 国内访问快
- 免费额度
- 与腾讯云集成
价格:
- 免费:个人版
- 付费:企业版
镜像管理 ⭐⭐⭐⭐
推送镜像:
# 登录
docker login registry.cn-beijing.aliyuncs.com
# 标记镜像
docker tag myapp:1.0 registry.cn-beijing.aliyuncs.com/myrepo/myapp:1.0
# 推送
docker push registry.cn-beijing.aliyuncs.com/myrepo/myapp:1.0
版本管理:
# 多版本标签
docker tag myapp:latest myapp:1.0
docker tag myapp:latest myapp:1.0.1
docker tag myapp:latest myapp:latest
# 推送所有标签
docker push myapp --all-tags
王尘宇实战建议
18 年经验总结
- 从小开始
- 先容器化简单应用
- 逐步迁移
-
不要一次性全部
-
镜像优化
- 使用小基础镜像
- 减少镜像层
-
定期清理
-
安全配置
- 不运行 root
- 扫描漏洞
-
私有镜像
-
监控日志
- 容器监控
- 日志收集
-
资源限制
-
持续学习
- 容器技术发展快
- 持续学习
- 最佳实践
西安企业建议
- 从 Docker 开始
- 使用国内镜像仓库
- 逐步学习 K8s
- 重视安全
常见问题解答
Q1:容器化难吗?
答:
- Docker 入门简单
- K8s 较复杂
- 有学习曲线
- 值得投入
Q2:小项目需要容器化吗?
答:
- 可选
- 环境一致性好
- 部署方便
- 根据需求
Q3:容器化性能如何?
答:
- 性能损失<5%
- 几乎无感
- 资源隔离好
- 利用率高
Q4:如何学习 Docker?
答:
- 官方文档
- 在线教程
- 实践项目
- 社区交流
Q5:容器化成本多少?
答:
- Docker 免费
- K8s 免费
- 管理平台付费
- 云托管付费
总结
网站容器化部署核心要点:
- 🐳 Docker 基础 — 镜像、容器、Dockerfile
- 📦 Docker Compose — 多容器编排
- ☸️ Kubernetes — 容器编排
- 🗄️ 镜像仓库 — 存储、管理
- 🔒 安全配置 — 权限、扫描、监控
王尘宇建议: 容器化是现代化部署的趋势。尽早学习实践,提升部署效率,降低运维成本。
关于作者
王尘宇
西安蓝蜻蜓网络科技有限公司创始人
联系方式:
- 🌐 网站:wangchenyu.com
- 💬 微信:wangshifucn
- 📱 QQ:314111741
- 📍 地址:陕西西安
本文最后更新:2026 年 3 月 18 日
版权声明:本文为王尘宇原创,属于"网站建设系列"第 34 篇,转载请联系作者并注明出处。
下一篇:WEB-35:网站云原生架构
还木有评论哦,快来抢沙发吧~