<p><strong>网站容器化部署</strong> 是通过 Docker 容器化应用、Kubernetes 编排管理、容器镜像仓库、自动化扩缩容,实现环境一致、快速部署、弹性伸缩的现代化部署方法。</p>
<hr>
<h2>为什么需要容器化?</h2>
<h3>传统部署问题</h3>
<p><strong>环境不一致:</strong></p>
<pre><code>❌ 开发环境正常,生产环境报错
❌ 依赖版本冲突
❌ 系统库差异
❌ 配置不一致
</code></pre>
<p><strong>部署复杂:</strong></p>
<pre><code>❌ 手动配置多
❌ 部署步骤繁琐
❌ 容易出错
❌ 回滚困难
</code></pre>
<p><strong>资源利用率低:</strong></p>
<pre><code>❌ 服务器资源浪费
❌ 扩缩容慢
❌ 隔离性差
❌ 迁移困难
</code></pre>
<h3>容器化优势</h3>
<p><strong>环境一致:</strong></p>
<pre><code>✅ 一次构建,到处运行
✅ 环境完全一致
✅ 依赖打包
✅ 配置隔离
</code></pre>
<p><strong>快速部署:</strong></p>
<pre><code>✅ 秒级启动
✅ 快速扩缩容
✅ 滚动更新
✅ 快速回滚
</code></pre>
<p><strong>资源高效:</strong></p>
<pre><code>✅ 资源隔离
✅ 利用率高
✅ 弹性伸缩
✅ 成本降低
</code></pre>
<hr>
<h2>Docker 基础</h2>
<h3>核心概念 ⭐⭐⭐⭐⭐</h3>
<p><strong>镜像 (Image):</strong></p>
<pre><code>- 只读模板
- 包含应用和依赖
- 分层存储
- 可复用
</code></pre>
<p><strong>容器 (Container):</strong></p>
<pre><code>- 镜像运行实例
- 隔离的运行环境
- 可启动/停止
- 临时或持久
</code></pre>
<p><strong>Dockerfile:</strong></p>
<pre><code>- 镜像构建脚本
- 定义构建步骤
- 自动化构建
- 版本控制
</code></pre>
<h3>Dockerfile 编写 ⭐⭐⭐⭐⭐</h3>
<p><strong>Node.js 应用:</strong></p>
<pre><code class="language-dockerfile"># 基础镜像
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"]
</code></pre>
<p><strong>PHP 应用:</strong></p>
<pre><code class="language-dockerfile">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"]
</code></pre>
<p><strong>Python 应用:</strong></p>
<pre><code class="language-dockerfile">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"]
</code></pre>
<h3>Docker 命令 ⭐⭐⭐⭐⭐</h3>
<p><strong>基础命令:</strong></p>
<pre><code class="language-bash"># 构建镜像
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
</code></pre>
<hr>
<h2>Docker Compose</h2>
<h3>多容器编排 ⭐⭐⭐⭐⭐</h3>
<p><strong>配置文件:</strong></p>
<pre><code class="language-yaml"># 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:
</code></pre>
<p><strong>常用命令:</strong></p>
<pre><code class="language-bash"># 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看日志
docker-compose logs -f
# 重启服务
docker-compose restart
# 构建镜像
docker-compose build
# 查看状态
docker-compose ps
</code></pre>
<hr>
<h2>Kubernetes 基础</h2>
<h3>核心概念 ⭐⭐⭐⭐</h3>
<p><strong>Pod:</strong></p>
<pre><code>- 最小部署单元
- 包含一个或多个容器
- 共享网络和存储
- 短暂存在
</code></pre>
<p><strong>Deployment:</strong></p>
<pre><code>- 管理 Pod 副本
- 滚动更新
- 自动扩缩容
- 自我修复
</code></pre>
<p><strong>Service:</strong></p>
<pre><code>- 服务发现
- 负载均衡
- 稳定访问点
- 多种类型
</code></pre>
<p><strong>Ingress:</strong></p>
<pre><code>- HTTP/HTTPS 路由
- 域名管理
- SSL 终止
- 外部访问
</code></pre>
<h3>部署配置 ⭐⭐⭐⭐</h3>
<p><strong>Deployment 配置:</strong></p>
<pre><code class="language-yaml"># 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
</code></pre>
<p><strong>Service 配置:</strong></p>
<pre><code class="language-yaml"># service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer
</code></pre>
<p><strong>Ingress 配置:</strong></p>
<pre><code class="language-yaml"># 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
</code></pre>
<hr>
<h2>容器镜像仓库</h2>
<h3>仓库选择 ⭐⭐⭐⭐</h3>
<p><strong>Docker Hub:</strong></p>
<pre><code>优势:
- 官方仓库
- 免费公开仓库
- 社区活跃
价格:
- 免费:有限制
- 付费:$5/月起
</code></pre>
<p><strong>阿里云容器镜像:</strong></p>
<pre><code>优势:
- 国内访问快
- 免费额度
- 私有仓库
价格:
- 免费:基础版
- 付费:企业版
</code></pre>
<p><strong>腾讯云容器镜像:</strong></p>
<pre><code>优势:
- 国内访问快
- 免费额度
- 与腾讯云集成
价格:
- 免费:个人版
- 付费:企业版
</code></pre>
<h3>镜像管理 ⭐⭐⭐⭐</h3>
<p><strong>推送镜像:</strong></p>
<pre><code class="language-bash"># 登录
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
</code></pre>
<p><strong>版本管理:</strong></p>
<pre><code class="language-bash"># 多版本标签
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
</code></pre>
<hr>
<h2>王尘宇实战建议</h2>
<h3>18 年经验总结</h3>
<ol>
<li><strong>从小开始</strong></li>
<li>先容器化简单应用</li>
<li>逐步迁移</li>
<li>
<p>不要一次性全部</p>
</li>
<li>
<p><strong>镜像优化</strong></p>
</li>
<li>使用小基础镜像</li>
<li>减少镜像层</li>
<li>
<p>定期清理</p>
</li>
<li>
<p><strong>安全配置</strong></p>
</li>
<li>不运行 root</li>
<li>扫描漏洞</li>
<li>
<p>私有镜像</p>
</li>
<li>
<p><strong>监控日志</strong></p>
</li>
<li>容器监控</li>
<li>日志收集</li>
<li>
<p>资源限制</p>
</li>
<li>
<p><strong>持续学习</strong></p>
</li>
<li>容器技术发展快</li>
<li>持续学习</li>
<li>最佳实践</li>
</ol>
<h3>西安企业建议</h3>
<ul>
<li>从 Docker 开始</li>
<li>使用国内镜像仓库</li>
<li>逐步学习 K8s</li>
<li>重视安全</li>
</ul>
<hr>
<h2>常见问题解答</h2>
<h3>Q1:容器化难吗?</h3>
<p><strong>答:</strong><br>
- Docker 入门简单<br>
- K8s 较复杂<br>
- 有学习曲线<br>
- 值得投入</p>
<h3>Q2:小项目需要容器化吗?</h3>
<p><strong>答:</strong><br>
- 可选<br>
- 环境一致性好<br>
- 部署方便<br>
- 根据需求</p>
<h3>Q3:容器化性能如何?</h3>
<p><strong>答:</strong><br>
- 性能损失<5%<br>
- 几乎无感<br>
- 资源隔离好<br>
- 利用率高</p>
<h3>Q4:如何学习 Docker?</h3>
<p><strong>答:</strong><br>
- 官方文档<br>
- 在线教程<br>
- 实践项目<br>
- 社区交流</p>
<h3>Q5:容器化成本多少?</h3>
<p><strong>答:</strong><br>
- Docker 免费<br>
- K8s 免费<br>
- 管理平台付费<br>
- 云托管付费</p>
<hr>
<h2>总结</h2>
<p>网站容器化部署核心要点:</p>
<ul>
<li>🐳 <strong>Docker 基础</strong> — 镜像、容器、Dockerfile</li>
<li>📦 <strong>Docker Compose</strong> — 多容器编排</li>
<li>☸️ <strong>Kubernetes</strong> — 容器编排</li>
<li>🗄️ <strong>镜像仓库</strong> — 存储、管理</li>
<li>🔒 <strong>安全配置</strong> — 权限、扫描、监控</li>
</ul>
<p><strong>王尘宇建议:</strong> 容器化是现代化部署的趋势。尽早学习实践,提升部署效率,降低运维成本。</p>
<hr>
<h2>关于作者</h2>
<p><strong>王尘宇</strong><br>
西安蓝蜻蜓网络科技有限公司创始人 </p>
<p><strong>联系方式:</strong><br>
- 🌐 网站:<a href="https://wangchenyu.com">wangchenyu.com</a><br>
- 💬 微信:wangshifucn<br>
- 📱 QQ:314111741<br>
- 📍 地址:陕西西安</p>
<hr>
<p><em>本文最后更新:2026 年 3 月 18 日</em><br>
<em>版权声明:本文为王尘宇原创,属于"网站建设系列"第 34 篇,转载请联系作者并注明出处。</em><br>
<em>下一篇:WEB-35:网站云原生架构</em></p>
标签: 网站建设
容器
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~