【华为云 ECS 实战(三)】2核2G云服务器部署 Docker Compose,实现容器自动重启、健康检查与日志管理

举报
yd_229180646 发表于 2026/10/24 19:21:27 2026/10/24
【摘要】 【华为云 ECS 实战(三)】2核2G云服务器部署 Docker Compose,实现容器自动重启、健康检查与日志管理文章分类: 云计算技术标签: 华为云、ECS、Docker、Docker Compose、Linux、云服务器运维一、前言在使用云服务器的过程中,我们经常需要部署各种应用,例如个人网站、监控面板、RSS 服务和自动化工具。最初,我们可能直接使用 docker run 启动容器...

【华为云 ECS 实战(三)】2核2G云服务器部署 Docker Compose,实现容器自动重启、健康检查与日志管理

文章分类: 云计算

技术标签: 华为云、ECS、Docker、Docker Compose、Linux、云服务器运维

一、前言

在使用云服务器的过程中,我们经常需要部署各种应用,例如个人网站、监控面板、RSS 服务和自动化工具。

最初,我们可能直接使用 docker run 启动容器。但随着部署的服务越来越多,传统方式逐渐暴露出一些问题:

  • 容器启动参数较多,不方便长期维护。

  • 云服务器重启后,需要确保业务能够自动恢复。

  • 应用异常退出时,希望容器自动重新启动。

  • 容器日志持续增长,可能占用大量磁盘空间。

  • 应用部署和迁移缺少统一的配置文件。

针对这些问题,可以使用 Docker Compose 对容器进行统一管理。

本文将基于一台华为云 2核2G 弹性云服务器(ECS),搭建一个轻量级 Web 服务,并演示如何配置自动重启、健康检查、日志轮转以及数据备份。

本文提供的是可复现的部署示例,实际资源占用和运行状态应以个人服务器的测试结果为准。

二、实验环境与部署目标

2.1 实验环境

项目 配置
云平台 华为云
云服务器 弹性云服务器 ECS
CPU 2 vCPU
内存 2GB
操作系统 Ubuntu 24.04 LTS
容器引擎 Docker Engine
编排工具 Docker Compose V2
示例应用 Nginx

该配置适合学习 Docker 容器管理和部署轻量级应用。

2.2 实现目标

本次主要完成以下功能:

  1. 安装并验证 Docker Compose。

  2. 使用 YAML 配置文件部署 Nginx。

  3. 配置容器异常退出后自动重启。

  4. 增加 HTTP 健康检查。

  5. 限制容器日志的磁盘占用。

  6. 掌握常用运维及备份命令。

整个过程不需要额外购买云服务器,也不依赖复杂的 Kubernetes 集群。

三、准备华为云 ECS 环境

3.1 检查系统配置

登录华为云 ECS 后,执行:

cat /etc/os-release

查看服务器内存:

free -h

查看磁盘剩余空间:

df -h

建议在操作前确认系统运行正常,并预留足够磁盘空间用于容器镜像和日志。

3.2 安装 Docker 与 Compose

对于尚未安装 Docker 的 Ubuntu 24.04 系统,可以使用 Ubuntu 软件仓库中的软件包:

sudo apt update
sudo apt install -y docker.io docker-compose-v2

如果软件包无法定位,需要检查系统是否启用了 Universe 软件仓库。

如果服务器已经通过 Docker 官方软件仓库安装了 Docker Engine,则应沿用现有安装来源,不要直接混装两套 Docker 软件包。

启动 Docker 服务:

sudo systemctl enable --now docker

检查 Docker 版本:

sudo docker --version

检查 Compose:

sudo docker compose version

注意:新版 Compose 使用的是 docker compose 命令,中间为空格,而不是旧版的 docker-compose。

四、使用 Docker Compose 部署 Web 服务

4.1 创建项目目录

首先创建一个独立的应用目录:

mkdir -p ~/ecs-web-lab/site
cd ~/ecs-web-lab

其中:

  • ecs-web-lab:项目根目录。

  • site:保存网站静态文件。

  • compose.yaml:保存容器配置。

4.2 创建测试页面

执行:

cat > site/index.html <<'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Huawei Cloud ECS Demo</title>
</head>
<body>
  <h1>Huawei Cloud ECS</h1>
  <p>Docker Compose is running!</p>
</body>
</html>
EOF

这里使用一个简单的 HTML 页面演示容器部署,不需要额外安装数据库。

4.3 编写 Compose 配置文件

创建 compose.yaml:

nano compose.yaml

填入:

services:
  web:
    image: nginx:stable-alpine
    container_name: ecs-web-demo

    restart: unless-stopped

    ports:
      - "127.0.0.1:8080:80"

    volumes:
      - ./site:/usr/share/nginx/html:ro

    healthcheck:
      test:
        - CMD-SHELL
        - "wget -q --spider http://127.0.0.1/ || exit 1"
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

    logging:
      driver: local
      options:
        max-size: "10m"
        max-file: "3"

这份配置实现了几个核心功能。

第一,容器自动重启。

restart: unless-stopped 表示当容器异常退出或 Docker 服务重启时,Docker 会根据重启策略恢复容器。

如果容器被管理员主动停止,则不会违背管理员的停止意图自动恢复。

第二,限制访问范围。

配置中的:

ports:
  - "127.0.0.1:8080:80"

让服务仅监听服务器本机的 8080 端口。

这样可以避免把演示服务直接暴露到公网。

第三,配置持久化目录。

通过 volumes 把宿主机目录映射进容器,网站文件不会因为容器重新创建而直接丢失。

第四,限制日志大小。

通过 Docker 的 local 日志驱动及轮转设置,减少容器日志无限增长的风险。

4.4 启动容器

保存配置后,先验证格式:

sudo docker compose config

确认无误后启动:

sudo docker compose up -d

查看运行状态:

sudo docker compose ps

检查网站是否正常响应:

curl -I http://127.0.0.1:8080

如果看到 HTTP 200 等正常响应,说明 Web 服务已经可以访问。

五、配置容器健康检查

Docker 容器处于运行状态,并不代表应用程序一定能够正常提供服务。

例如,Web 服务进程虽然存在,但内部应用可能已经无法响应请求。

为此,Docker 提供了 Healthcheck 健康检查机制。

本例中配置:

healthcheck:
  test:
    - CMD-SHELL
    - "wget -q --spider http://127.0.0.1/ || exit 1"
  interval: 30s
  timeout: 5s
  retries: 3
  start_period: 10s

各项参数的含义如下:

参数 作用
test 执行 HTTP 检查
interval 每隔30秒检查
timeout 单次检查超时5秒
retries 连续失败3次后判定异常
start_period 启动初期给予10秒宽限期

可以执行:

sudo docker inspect \
  --format '{{.State.Health.Status}}' \
  ecs-web-demo

正常情况下,健康检查通过后会返回:

healthy

需要注意,健康检查和自动重启并不是同一个功能。

Healthcheck 负责识别应用是否健康,而 restart 策略主要针对容器退出的情况。

如果容器仍在运行,但状态变成 unhealthy,Docker Engine 不会仅仅因为这个状态就自动重新启动容器。

实际生产环境可以进一步结合监控告警与故障恢复机制。

六、限制容器日志占用

对于磁盘容量有限的云服务器,日志管理非常重要。

一些应用可能持续写入运行记录、访问日志和错误信息。如果长期不做限制,日志就可能占用大量磁盘空间。

本例使用:

logging:
  driver: local
  options:
    max-size: "10m"
    max-file: "3"

其中:

  • local:Docker 提供的本地日志驱动。

  • max-size:单个日志文件轮转阈值为10MB。

  • max-file:保留最多3个轮转日志文件。

该设置适用于当前示例容器,并不代表整台云服务器的磁盘使用量被限制在30MB。

Docker 镜像、容器数据、网站文件以及其他日志仍然会占用磁盘。

查看日志:

sudo docker compose logs --tail 50

实时查看:

sudo docker compose logs -f

查看容器占用:

sudo docker stats --no-stream

查看 Docker 磁盘使用:

sudo docker system df

这些命令可以帮助我们快速了解容器运行情况。

七、掌握常用容器运维命令

在日常管理中,以下命令非常实用。

1. 查看运行状态

sudo docker compose ps

2. 重启服务

sudo docker compose restart

3. 停止服务

sudo docker compose stop

4. 启动已经停止的服务

sudo docker compose start

5. 拉取更新后的镜像

sudo docker compose pull

拉取后可以使用:

sudo docker compose up -d

让 Compose 按配置更新服务。

生产环境建议固定经过测试的镜像版本,并在升级前做好备份,而不是无限制追随最新镜像。

6. 查看具体容器信息

sudo docker inspect ecs-web-demo

这些命令基本覆盖了轻量级 Docker 服务的日常管理需求。

八、备份与恢复项目文件

容器镜像可以重新下载,但应用配置和业务数据往往更加重要。

本例把静态网页保存在宿主机目录,因此可以直接备份项目文件。

8.1 创建备份

执行:

mkdir -p ~/ecs-web-backups

然后备份:

tar -czf "$HOME/ecs-web-backups/ecs-web-$(date +%F-%H%M).tar.gz" \
  -C "$HOME/ecs-web-lab" \
  site compose.yaml

这会生成包含网站文件和 Compose 配置的压缩包。

8.2 恢复备份

如果需要恢复,可以先停止当前示例服务,并将原有目录另行保留,然后把可信备份解压到项目目录。

例如:

cd ~/ecs-web-lab
sudo docker compose stop

再执行:

tar -xzf ~/ecs-web-backups/备份文件名.tar.gz -C .

最后恢复服务:

sudo docker compose up -d

需要特别注意,本例是静态网站,备份流程相对简单。

如果部署的是 PostgreSQL、MySQL 等数据库,不能直接照搬这套方法。数据库备份还需要考虑数据一致性,通常应使用对应数据库提供的备份工具。

此外,重要备份应定期复制到其他存储位置,避免云服务器磁盘损坏时备份一起丢失。

九、常见问题排查

9.1 提示 Docker Compose 命令不存在

先检查:

sudo docker compose version

如果返回 Compose 不是有效子命令,应检查 V2 插件是否正确安装。

不要将 Docker Compose V1 和 V2 的安装方式混为一谈。

9.2 容器无法启动

执行:

sudo docker compose logs --tail 100

查看错误信息。

常见原因包括:

  • YAML 配置缩进错误。

  • 镜像无法正常拉取。

  • 端口已经被其他程序占用。

  • 映射目录权限不正确。

可以通过以下命令排查端口:

sudo ss -lntp

9.3 本机可以访问,公网无法访问

本例特意将服务绑定到 127.0.0.1,因此只能从云服务器本机访问。

这不是华为云安全组配置错误,而是刻意采用的安全设计。

如果后续需要部署公网网站,应重新设计访问入口,配置适当的反向代理、HTTPS 和安全组规则。

华为云 ECS 的安全组可以控制入方向和出方向流量,建议仅开放实际需要的端口。

同时,如果使用中国内地节点对外提供网站服务,还应按照实际业务类型核实网站备案及相关合规要求。

9.4 健康检查显示 unhealthy

可以先查看健康检查记录:

sudo docker inspect \
  --format '{{json .State.Health}}' \
  ecs-web-demo

重点检查:

  • 容器内部 HTTP 服务是否正常。

  • 健康检查命令是否能够执行。

  • 应用启动时间是否超过预期。

  • 网络监听端口是否正确。

不要直接把所有 unhealthy 状态都当作需要强制重启的故障。

十、总结

通过本次实践,我们利用 Docker Compose 完成了一套基础的容器部署与管理流程。

相比直接使用大量 docker run 命令,Compose 最大的优势是将服务配置统一写入 YAML 文件,降低了重复部署和日常管理的复杂度。

对于华为云 2核2G ECS 这样的入门级云服务器,这种方式尤其适合轻量级 Web 服务和个人实验项目。

本次重点实现了:

  • 使用 Compose 管理容器生命周期。

  • 使用重启策略提升容器退出后的恢复能力。

  • 使用健康检查了解应用实际运行状态。

  • 使用日志轮转降低磁盘空间风险。

  • 使用文件备份保存重要配置和静态数据。

当然,这些功能并不能替代完整的生产级高可用架构。单台 ECS 仍然存在单点故障风险,健康检查也不等于自动故障修复。

从服务器监控、SSH 安全加固,再到 Docker Compose 容器运维,这三个方面结合起来,可以逐步建立一套适合个人开发者的轻量级云服务器管理体系。

对于初次接触云服务器的开发者来说,不必一开始就追求复杂架构。先把部署、维护、安全和备份这些基础环节做好,往往更有价值。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。