当前位置: 首页 > news >正文

把openEuler当微服务跑:Docker Compose编排实战,管理Nginx+MySQL多容器集群

基于openEuler的微服务集群实战:Docker Compose编排Nginx+MySQL全流程

在云原生技术席卷企业IT基础设施的今天,将操作系统容器化已成为提升资源利用率、加速应用交付的标准实践。openEuler作为面向数字基础设施的开源操作系统,凭借其卓越的多架构支持能力和云原生友好特性,正成为容器化部署的理想选择。本文将带您深入探索如何利用Docker Compose这一编排利器,在openEuler基础上构建完整的Nginx+MySQL微服务集群,实现从单机部署到生产级集群管理的技术跃迁。

1. 环境准备与架构设计

1.1 系统需求与组件选型

构建基于openEuler的容器化微服务集群,需要确保基础环境满足以下要求:

  • Docker引擎:版本20.10.0及以上,支持Compose V2格式
  • openEuler镜像:推荐LTS版本(如24.03-lts-sp2),保证长期支持
  • 硬件资源:至少2核CPU、4GB内存、20GB磁盘空间
  • 网络配置:主机需开启IP转发(net.ipv4.ip_forward=1)

关键组件版本矩阵:

组件推荐版本替代方案备注
openEuler24.03-lts-sp222.03-lts-sp4生产环境首选LTS
Nginx1.25.3OpenResty支持HTTP/3
MySQL8.0.36MariaDB 10.11事务型业务首选

1.2 多容器网络拓扑设计

合理的网络架构是微服务稳定运行的基础。我们采用桥接网络模式,设计如下通信方案:

[Host Machine] ├── [openeuler-bridge-network] │ ├── nginx-container (172.20.0.10) │ ├── mysql-container (172.20.0.20) │ └── [自定义网络策略] └── [Host Volume Mounts] ├── /data/nginx └── /data/mysql

这种设计实现了:

  • 容器间通过服务名直接通信
  • 关键数据持久化到宿主机
  • 端口暴露最小化原则

2. Docker Compose编排实战

2.1 编写docker-compose.yml

创建项目目录并编写核心配置文件:

mkdir -p ~/openeuler-cluster/{nginx,mysql} && cd ~/openeuler-cluster
version: '3.8' services: nginx: image: nginx:1.25.3-alpine container_name: openeuler-nginx platform: linux/amd64 ports: - "8080:80" - "8443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/logs:/var/log/nginx networks: - openeuler-net depends_on: - mysql healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 10s retries: 3 mysql: image: mysql:8.0 container_name: openeuler-mysql platform: linux/amd64 environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - ./mysql/data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d networks: - openeuler-net healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] timeout: 20s retries: 10 networks: openeuler-net: driver: bridge ipam: config: - subnet: 172.20.0.0/24

2.2 环境变量配置

创建.env文件管理敏感配置:

# Database Configuration DB_ROOT_PASSWORD=OpenEuler@1234 DB_NAME=app_db DB_USER=app_user DB_PASSWORD=User@5678 # Network Settings SUBNET=172.20.0.0/24 NGINX_IP=172.20.0.10 MYSQL_IP=172.20.0.20

2.3 初始化脚本准备

MySQL容器首次启动时会执行/docker-entrypoint-initdb.d目录下的脚本:

# 创建初始化SQL文件 cat > ~/openeuler-cluster/mysql/init/01-create-tables.sql <<EOF CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; EOF

3. 集群部署与优化

3.1 启动与验证集群

执行以下命令启动整个集群:

docker compose up -d

验证服务状态:

# 检查容器运行状态 docker compose ps # 测试Nginx连接MySQL docker exec openeuler-nginx sh -c "apk add mysql-client && mysql -h mysql -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e 'SHOW TABLES;'" # 查看实时日志 docker compose logs -f

3.2 性能调优配置

针对openEuler环境优化Nginx配置:

# ~/openeuler-cluster/nginx/conf.d/app.conf upstream backend { server mysql:3306; keepalive 32; } server { listen 80; server_name localhost; location /db { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; } }

MySQL性能优化建议:

# 在my.cnf中添加 [mysqld] innodb_buffer_pool_size = 1G innodb_log_file_size = 256M skip_name_resolve = ON default_authentication_plugin = mysql_native_password

4. 生产环境进阶管理

4.1 高可用方案设计

实现零停机部署的滚动更新策略:

# 在docker-compose.yml中添加 deploy: update_config: parallelism: 1 delay: 10s order: start-first

备份与恢复方案:

# MySQL每日备份 docker exec openeuler-mysql sh -c 'mysqldump -u root -p${MYSQL_ROOT_PASSWORD} --all-databases | gzip > /var/lib/mysql/backup/$(date +%Y%m%d).sql.gz' # Nginx配置版本控制 cd ~/openeuler-cluster/nginx && git init git add . && git commit -m "Initial config"

4.2 监控与日志收集

配置Prometheus监控指标:

# docker-compose.yml追加 monitoring: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml networks: - openeuler-net

日志收集的ELK方案:

# 修改Nginx日志格式 log_format json_combined escape=json '{' '"time":"$time_iso8601",' '"remote_addr":"$remote_addr",' '"request":"$request",' '"status": "$status",' '"body_bytes_sent":"$body_bytes_sent",' '"request_time":"$request_time"' '}';

5. 故障排查与日常维护

5.1 常见问题解决方案

容器网络连通性测试

# 检查容器间通信 docker exec -it openeuler-nginx ping mysql # 查看网络详情 docker network inspect openeuler-cluster_openeuler-net

资源限制配置示例

# 在docker-compose.yml中限制资源 nginx: deploy: resources: limits: cpus: '1.5' memory: 1G reservations: memory: 512M

5.2 安全加固措施

实施最小权限原则:

# 为MySQL创建专用用户 docker exec openeuler-mysql mysql -u root -p${DB_ROOT_PASSWORD} -e "CREATE USER 'app_ro'@'%' IDENTIFIED BY 'Readonly@123'; GRANT SELECT ON ${DB_NAME}.* TO 'app_ro'@'%';" # 定期轮换密码 openssl rand -base64 16 | docker secret create db_password_v2 -

在openEuler宿主机上实施的安全配置:

# 配置防火墙规则 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.20.0.0/24" port port="3306" protocol="tcp" accept' firewall-cmd --reload # 启用SELinux容器策略 semanage port -a -t http_port_t -p tcp 8080
http://www.jsqmd.com/news/623224/

相关文章:

  • PDF-Extract-Kit-1.0与STM32CubeMX的嵌入式集成方案
  • Happy Island Designer终极指南:从零开始打造梦想岛屿的完整教程
  • 基于 OpenCV 与 C# 的多功能机器视觉工具箱详解
  • 《Windows PE权威指南》学习之第13章 PE补丁技术(2)
  • ENVI打不开国产ZY-02D卫星影像?别急,试试这个XML文件“瘦身”大法
  • 再谈概率期望(三):我说爬塔学随机是对的。
  • 艾尔登法环终极优化指南:解锁帧率与游戏增强的完整教程
  • 保姆级教程:基于vllm+chainlit快速部署Qwen2.5-VL多模态模型
  • 文墨共鸣效果展示:当传统水墨美学遇上现代AI技术
  • 抖音UID、sec_uid、抖音号傻傻分不清?一篇讲透它们的区别与数据抓取实战
  • 从理论到实践:单自由度导纳控制的Simulink建模与仿真验证
  • php-amqplib批量发布优化:提升消息吞吐量10倍的终极秘诀
  • 茶叶病害目标检测数据集 茶叶病害识别管理系统 数据集+界面+模型 识别功能包括登录、导入模型、图片、视频、实时检测
  • 芯片中层的三道坎:贪权、嗔人、痴技术
  • 美容业绩倍增新员工 朝夕科美AI美容仪——解锁美业新人致胜密码 - 企业推荐官【官方】
  • 3个关键策略深度解析krita-ai-diffusion插件模型初始化失败问题
  • DETR实战:用Transformer搞定目标检测,告别NMS和Anchor的烦恼
  • SleeperX:Mac智能睡眠控制终极方案,告别合盖中断烦恼
  • 如何用ComfyUI ControlNet预处理器打造精准AI图像控制:从入门到精通
  • 如何在极域电子教室控制下找回学习自主权
  • 终极Blender插件指南:5个技巧让你3分钟掌握BlenderKit 3D资产库
  • Qwen-Image-Edit-F2P在计算机网络教学中的可视化应用
  • 2026年压敏胶市场盘点:领先企业凭何脱颖而出? - 企业推荐官【官方】
  • 天梯赛历届真题精解:从入门到精通的实战指南
  • Pixel Dream Workshop 大模型一键部署教程:3步搭建创意生成环境
  • Cesium轨迹回放进阶:如何优化无人机飞行路径的平滑度和性能
  • 《误差理论》——从线性到非线性:最小二乘法在参数估计中的统一矩阵视角
  • JFlash实战指南:从零开始烧录BIN文件到目标芯片
  • 电脑越用越卡?用Mem Reduct轻松释放Windows内存的完整指南
  • PKHeX自动合法性插件:3步实现宝可梦数据合规化