按 Enter 键跳转到正文

轻量级容器编排工具指南

轻量级容器编排工具指南

在 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 重启时)

示例:

1# 启动PHP容器,配置always重启策略
2docker run -d \
3  --name php-app \
4  --restart always \  # 核心:容器挂掉后自动重启
5  -p 80:80 \
6  -v /path/to/php/code:/var/www/html \
7  php:8.2-apache

优势: 零依赖,直接使用 Docker 原生功能,适合单机部署。

局限: 仅能监控容器本身是否存活,无法检测应用内部故障(如 PHP-FPM 假死但容器仍运行)。

1.2 ocker Compose(适合多容器应用)

如果 项目依赖其他服务(如 MySQL、Redis),可使用docker-compose管理,通过配置restart参数实现自动重启,同时支持健康检查。

docker-compose.yml示例:

 1version: '3.8'
 2services:
 3  php-app:
 4    image: php:8.2-apache
 5    restart: always  # 容器退出后自动重启
 6    ports:
 7      - "80:80"
 8    volumes:
 9      - ./php-code:/var/www/html
10    depends_on:
11      - mysql
12    # 健康检查:检测PHP服务是否正常响应
13    healthcheck:
14      test: ["CMD", "curl", "-f", "http://localhost/health.php"]  # 自定义健康检查接口
15      interval: 30s  # 每30秒检查一次
16      timeout: 10s   # 检查超时时间
17      retries: 3     # 连续3次失败视为不健康
18      start_period: 60s  # 启动后60秒内不检查
19
20  mysql:
21    image: mysql:8.0
22    restart: always
23    environment:
24      MYSQL_ROOT_PASSWORD: rootpass
25      MYSQL_DATABASE: phpapp

健康检查补充: 在 PHP 项目中创建health.php作为健康检查接口(返回 200 状态码表示正常):

优势: 管理多容器依赖关系,结合健康检查可更精准地判断应用状态。

适用场景: 中小型 PHP 应用(如 LAMP/LNMP 架构)。

1.3 Supervisor(容器内进程管理)

如果 PHP 项目在容器内运行多个进程(如 PHP-FPM+Nginx),或需要更精细的进程控制,可在容器中安装supervisor作为进程管理工具,实现进程挂掉后自动重启。

实现步骤:

  1. 构建包含 supervisor 的 PHP 镜像
    创建Dockerfile
     1FROM php:8.2-fpm
     2
     3# 安装supervisor
     4RUN apt-get update && apt-get install -y supervisor
     5
     6# 配置supervisor
     7RUN mkdir -p /var/log/supervisor
     8COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
     9
    10# 启动supervisor
    11CMD ["/usr/bin/supervisord"]
    
  2. 编写 supervisor 配置文件(supervisord.conf):
     1[supervisord]
     2nodaemon=true  # 前台运行,确保容器不退出
     3
     4[program:php-fpm]
     5command=/usr/local/sbin/php-fpm
     6autostart=true  # 自动启动
     7autorestart=true  # 进程退出后自动重启
     8stderr_logfile=/var/log/php-fpm.err.log
     9stdout_logfile=/var/log/php-fpm.out.log
    10
    11# 若同时运行Nginx,可添加:
    12[program:nginx]
    13command=/usr/sbin/nginx -g "daemon off;"
    14autostart=true
    15autorestart=true
    16stderr_logfile=/var/log/nginx.err.log
    17stdout_logfile=/var/log/nginx.out.log
    
  3. 构建并启动容器:
1docker build -t php-supervisor .
2docker run -d --name php-app --restart always php-supervisor

优势:能监控容器内的具体进程(如 PHP-FPM),而非仅监控容器本身。
适用场景:容器内运行多进程的 PHP 应用。

二、 轻量级容器编排工具

如果需要跨主机部署或更丰富的编排能力,但又觉得 K8s 太重,可选择以下工具:

  1. Docker Swarm

    Docker 原生的集群编排工具,语法与 Docker Compose 兼容,支持服务自动重启、扩缩容、滚动更新。

    示例(初始化集群后部署):

    1# 部署PHP服务,配置自动重启和副本数
    2docker service create \
    3  --name php-app \
    4  --replicas 2 \  # 启动2个副本,实现高可用
    5  --restart-condition any \  # 任何情况退出都重启
    6  -p 80:80 \
    7  php:8.2-apache
    
  2. Nomad(HashiCorp)

    轻量级编排工具,支持 Docker 容器、虚拟机等多种任务类型,配置简单。

    适合中小团队,学习成本低于 K8s。

    HashiCorp

  3. Rancher + K3s

    K3s 是轻量级 Kubernetes,Rancher 提供可视化界面,简化部署和管理,兼顾功能与易用性。

    K3s使用指南

发表评论