轻量级容器编排工具指南
在 Docker 环境中,除了 K8s,还有多种轻量级方案可以实现服务自动重启、健康检查等功能,特别适合单机或中小规模部署。
一、简单方案
1.1 Docker 自身的重启策略(最基础方案)
Docker Engine 内置了容器重启策略,可直接在启动容器时配置,实现容器退出后自动重启。
常用重启策略:
--restart always:无论容器因何种原因退出(包括正常退出),总是自动重启。--restart on-failure[:max-retries]:仅在容器以非 0 状态码退出时重启,可选最大重试次数(如on-failure:3最多重启 3 次)。--restart unless-stopped:除非手动执行docker stop,否则始终重启(包括 Docker daemon 重启时)
示例:
# 启动PHP容器,配置always重启策略
docker run -d \
--name php-app \
--restart always \ # 核心:容器挂掉后自动重启
-p 80:80 \
-v /path/to/php/code:/var/www/html \
php:8.2-apache
优势: 零依赖,直接使用 Docker 原生功能,适合单机部署。
局限: 仅能监控容器本身是否存活,无法检测应用内部故障(如 PHP-FPM 假死但容器仍运行)。
1.2 ocker Compose(适合多容器应用)
如果 项目依赖其他服务(如 MySQL、Redis),可使用docker-compose管理,通过配置restart参数实现自动重启,同时支持健康检查。
docker-compose.yml示例:
version: '3.8'
services:
php-app:
image: php:8.2-apache
restart: always # 容器退出后自动重启
ports:
- "80:80"
volumes:
- ./php-code:/var/www/html
depends_on:
- mysql
# 健康检查:检测PHP服务是否正常响应
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health.php"] # 自定义健康检查接口
interval: 30s # 每30秒检查一次
timeout: 10s # 检查超时时间
retries: 3 # 连续3次失败视为不健康
start_period: 60s # 启动后60秒内不检查
mysql:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: phpapp
健康检查补充: 在 PHP 项目中创建health.php作为健康检查接口(返回 200 状态码表示正常):
优势: 管理多容器依赖关系,结合健康检查可更精准地判断应用状态。
适用场景: 中小型 PHP 应用(如 LAMP/LNMP 架构)。
1.3 Supervisor(容器内进程管理)
如果 PHP 项目在容器内运行多个进程(如 PHP-FPM+Nginx),或需要更精细的进程控制,可在容器中安装supervisor作为进程管理工具,实现进程挂掉后自动重启。
实现步骤:
- 构建包含 supervisor 的 PHP 镜像
创建Dockerfile:FROM php:8.2-fpm # 安装supervisor RUN apt-get update && apt-get install -y supervisor # 配置supervisor RUN mkdir -p /var/log/supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 启动supervisor CMD ["/usr/bin/supervisord"] - 编写 supervisor 配置文件(supervisord.conf):
[supervisord] nodaemon=true # 前台运行,确保容器不退出 [program:php-fpm] command=/usr/local/sbin/php-fpm autostart=true # 自动启动 autorestart=true # 进程退出后自动重启 stderr_logfile=/var/log/php-fpm.err.log stdout_logfile=/var/log/php-fpm.out.log # 若同时运行Nginx,可添加: [program:nginx] command=/usr/sbin/nginx -g "daemon off;" autostart=true autorestart=true stderr_logfile=/var/log/nginx.err.log stdout_logfile=/var/log/nginx.out.log - 构建并启动容器:
docker build -t php-supervisor .
docker run -d --name php-app --restart always php-supervisor
优势:能监控容器内的具体进程(如 PHP-FPM),而非仅监控容器本身。
适用场景:容器内运行多进程的 PHP 应用。
二、 轻量级容器编排工具
如果需要跨主机部署或更丰富的编排能力,但又觉得 K8s 太重,可选择以下工具:
Docker Swarm
Docker 原生的集群编排工具,语法与 Docker Compose 兼容,支持服务自动重启、扩缩容、滚动更新。
示例(初始化集群后部署):
# 部署PHP服务,配置自动重启和副本数 docker service create \ --name php-app \ --replicas 2 \ # 启动2个副本,实现高可用 --restart-condition any \ # 任何情况退出都重启 -p 80:80 \ php:8.2-apacheNomad(HashiCorp)
轻量级编排工具,支持 Docker 容器、虚拟机等多种任务类型,配置简单。
适合中小团队,学习成本低于 K8s。
Rancher + K3s
K3s 是轻量级 Kubernetes,Rancher 提供可视化界面,简化部署和管理,兼顾功能与易用性。