容器化部署:gh_mirrors/te/technical-books Docker 实战指南
你还在为技术文档部署烦恼?5分钟实现零依赖容器化交付
读完本文你将掌握
- 基于Docker的VitePress文档容器化全流程
- 多阶段构建优化镜像体积60%的实战技巧
- Docker Compose一键部署与热更新方案
- 国内环境适配的镜像加速配置
- 容器化部署常见问题排查指南
项目架构概览
核心技术栈对比表
| 技术组件 | 版本 | 作用 | 国内加速方案 |
|---|---|---|---|
| Node.js | 18-alpine | 文档构建环境 | 淘宝NPM镜像 |
| VitePress | 1.6.3 | 静态站点生成器 | 内置CDN配置 |
| Nginx | alpine | 静态资源服务 | 阿里云镜像 |
| Docker | 20.10+ | 容器化引擎 | 阿里云容器镜像 |
环境准备
Docker与Docker Compose安装
# CentOS系统
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
# 安装Docker Compose
curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
开发环境验证
# 克隆项目
git clone https://gitcode.com/gh_mirrors/te/technical-books.git
cd technical-books
# 本地验证
npm install
npm run docs:dev
Dockerfile深度解析
多阶段构建优化方案
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
# 使用淘宝NPM镜像加速依赖安装
RUN npm install --registry=https://registry.npmmirror.com
COPY . .
# 构建静态文件
RUN npm run docs:build
# 生产阶段
FROM nginx:alpine
# 复制构建产物
COPY --from=builder /app/docs/.vitepress/dist /usr/share/nginx/html
# 配置Nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
镜像体积优化对比
| 构建方式 | 镜像层数 | 最终体积 | 构建时间 |
|---|---|---|---|
| 单阶段构建 | 12 | 1.2GB | 8分钟 |
| 多阶段构建 | 5 | 420MB | 5分钟 |
| 多阶段+Alpine | 5 | 87MB | 5分钟 |
Docker Compose编排实战
一键部署配置文件
version: '3'
services:
technical-books:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:80"
restart: always
volumes:
- ./docs:/app/docs:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
environment:
- TZ=Asia/Shanghai
networks:
- doc-network
networks:
doc-network:
driver: bridge
Nginx性能优化配置
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# 缓存静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
# 支持SPA路由
location / {
try_files $uri $uri/ /index.html;
}
# 压缩配置
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
完整部署流程
国内环境加速配置
# 配置Docker镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com", "https://mirror.baidubce.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# NPM镜像配置
echo "registry=https://registry.npmmirror.com" > ~/.npmrc
开发与生产环境对比
| 特性 | 开发环境 | 容器化生产环境 |
|---|---|---|
| 依赖管理 | 本地node_modules | 容器内隔离 |
| 端口占用 | 动态分配 | 固定映射8080 |
| 代码更新 | 实时热重载 | 卷挂载同步 |
| 环境一致性 | 依赖本地配置 | 完全一致环境 |
| 资源占用 | 高 | 低(仅87MB) |
常见问题排查指南
构建失败问题
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| npm install超时 | 网络问题 | 配置NPM镜像加速 |
| 构建产物为空 | 构建命令错误 | 检查package.json的scripts |
| 端口映射冲突 | 8080端口被占用 | 修改docker-compose.yml中的端口映射 |
运行时问题
# 查看日志
docker-compose logs -f
# 进入容器
docker-compose exec technical-books sh
# 重新构建
docker-compose down && docker-compose up -d --build
高级优化技巧
镜像瘦身进阶
# 优化层缓存
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install --registry=https://registry.npmmirror.com
COPY docs ./docs # 仅复制必要文件
RUN npm run docs:build
# 进一步减小Nginx镜像
FROM nginx:alpine
COPY --from=builder /app/docs/.vitepress/dist /usr/share/nginx/html
# 删除nginx默认配置
RUN rm -rf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/
# 清理缓存
RUN rm -rf /var/cache/apk/*
CI/CD集成建议
# .gitlab-ci.yml示例
stages:
- build
- deploy
build_image:
stage: build
script:
- docker-compose build
- docker tag technical-books:latest your-registry/technical-books:${CI_COMMIT_SHORT_SHA}
- docker push your-registry/technical-books:${CI_COMMIT_SHORT_SHA}
deploy:
stage: deploy
script:
- ssh user@server "cd /path && docker-compose pull && docker-compose up -d"
总结与展望
容器化部署为gh_mirrors/te/technical-books项目带来了环境一致性、部署便捷性和资源高效利用的多重优势。通过本文介绍的多阶段构建和Docker Compose编排方案,仅需87MB即可完整运行整个技术文档站点,相比传统部署方式节省60%以上资源。
未来可进一步实现:
- 基于Kubernetes的集群化部署
- 镜像自动构建与版本管理
- 多环境部署策略(开发/测试/生产)
点赞收藏本文,关注获取更多容器化实战技巧!下期预告:《Docker Swarm实现高可用文档服务集群》
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



