Docker容器化部署实战:从零搭建生产环境
前言
Docker已经成为现代开发和运维的标配工具。本文将从零开始,带你搭建一个完整的生产环境部署方案。
一、环境准备
1.1 安装Docker
# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 验证安装
docker --version
docker compose version
1.2 配置镜像加速
国内服务器建议配置镜像加速器:
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com"
]
}
二、编写Dockerfile
以PHP+MySQL项目为例:
FROM php:8.2-fpm
# 安装扩展
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd pdo pdo_mysql mysqli
# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
COPY . .
RUN composer install --no-dev --optimize-autoloader
EXPOSE 9000
CMD ["php-fpm"]
三、Docker Compose编排
version: '3.8'
services:
app:
build: .
restart: unless-stopped
volumes:
- ./:/var/www/html
depends_on:
- db
networks:
- app-network
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- app-network
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
networks:
- app-network
volumes:
db_data:
networks:
app-network:
四、生产环境优化
4.1 多阶段构建
减小镜像体积:
# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
4.2 健康检查
services:
app:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
4.3 日志管理
services:
app:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
五、部署流程
# 构建镜像
docker compose build
# 启动服务
docker compose up -d
# 查看状态
docker compose ps
# 查看日志
docker compose logs -f app
# 更新部署
docker compose pull
docker compose up -d --remove-orphans
六、常用运维命令
# 进入容器
docker compose exec app bash
# 数据库备份
docker compose exec db mysqldump -u root -p myapp > backup.sql
# 清理无用镜像
docker image prune -a
# 查看资源占用
docker stats
总结
Docker容器化部署的核心优势:
- 环境一致性:开发、测试、生产环境完全一致
- 快速部署:一条命令启动完整环境
- 易于扩展:水平扩展只需增加容器实例
- 资源隔离:服务之间互不影响
掌握这些基础,你就能应对大部分生产环境的部署需求了。