hqbsh.com 运行时间
HQBSH.com的whois记录显示注册于2013年1月18日,至今已经持续运营了:0年0个月0天零0小时0分钟0秒

最新报价
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 296|回复: 0

华为 80 Pro Docker-compose配置示例

[复制链接]

180

主题

0

回帖

163

银子

超级版主

积分
3948
发表于 2026-6-5 06:04 | 显示全部楼层 |阅读模式
本帖最后由 dctc_shouhuzhe 于 2026-8-9 22:18 编辑

前言

说真的,企业级服务器虚拟化走到今天,Docker容器化基本已经是"真香"级别的存在了——启动快、迁移方便、资源利用率高,几乎绕不开。本文聚焦华为80 Pro平台上的Docker-Compose生产环境配置,从环境准备、daemon.json调优、Compose文件工程化实践,再到监控、安全与CI/CD,给出一套能直接落地的方案。

华为80 Pro

需要先说明一下:本文涉及的部分华为80 Pro硬件参数我会标注"典型配置范围",避免拿捏不准的数据误导你。具体采购型号与配置,请以华为官方技术白皮书或服务器随附的SPEC文档为准——这点老实讲,比网上传的"128线程""1TB内存"之类的段子靠谱得多。


一、华为80 Pro硬件适配性与容器化选型

1.1 处理器与内存

华为80 Pro作为面向中高端企业场景的服务器产品,典型配置采用多核至强系列处理器,支持大容量DDR4/DDR5内存。在容器化场景下,单台服务器通常需要承载数十到上百个容器实例,因此CPU多核与内存容量是首要考量指标。

以一个典型微服务架构为例,若每个容器平均占用2-4GB内存,16核32线程搭配128GB内存的常规配置,就能轻松支撑30-60个容器并行运行。如果业务规模更大,可以扩展到双路处理器配置,资源池的弹性空间会更足。

1.2 存储I/O性能

容器化对存储I/O非常敏感,尤其是Docker镜像分层解压、卷挂载、日志写入这几类操作。不同存储介质在容器场景下的表现差异巨大,下表给出了直观的对比:

存储类型顺序读取顺序写入随机读写IOPS容器场景适用度
NVMe SSD3000-7000 MB/s2000-5000 MB/s200K-1000K+⭐⭐⭐⭐⭐ 极佳
SATA SSD500-600 MB/s400-550 MB/s80K-100K⭐⭐⭐⭐ 良好
HDD120-200 MB/s100-180 MB/s几百⭐⭐ 不推荐

1.3 网络吞吐能力

企业级应用涉及大量服务间通信,80 Pro配备千兆/万兆网口,能在Docker的Bridge、Host、Overlay等网络模式下保持低延迟的跨容器通信。需要对外暴露服务时,建议用Nginx或Traefik做反向代理,配合Compose的端口映射实现多域名路由。


二、Docker环境准备与系统兼容性

2.1 操作系统选择

华为80 Pro的国产化适配是很多人关注的点。结合2026年主流发行版的稳定性与生态成熟度,给出以下推荐排序:

  1. Ubuntu Server 24.04 LTS(长期支持,生态完善,新版Docker兼容性最好)
  2. Debian 12 Bookworm(稳定可靠,适合追求最小化安装的场景)
  3. CentOS Stream 9 / Rocky Linux 9(企业生产常用)
  4. openEuler 22.03 / 麒麟V10(信创场景首选,需配置Docker兼容层)

2.2 Docker Engine安装流程

以Ubuntu Server 24.04 LTS为例:

`bash

sudo apt-get update && sudo apt-get upgrade -y

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

sudo usermod -aG docker $USER

newgrp docker

docker --version

docker compose version

`

2.3 Docker守护进程深度优化配置

针对华为80 Pro的硬件资源,建议编辑 /etc/docker/daemon.json

`json

{

"storage-driver": "overlay2",

"log-driver": "json-file",

"log-opts": {

"max-size": "100m",

"max-file": "3"

},

"default-ulimits": {

"nofile": {

"Name": "nofile",

"Hard": 65536,

"Soft": 65536

},

"nproc": {

"Name": "nproc",

"Hard": 4096,

"Soft": 4096

}

},

"live-restore": true,

"default-address-pools": [

{

"base": "172.17.0.0/16",

"size": 24

}

],

"registry-mirrors": [

"https://docker.mirrors.ustc.edu.cn",

"https://hub-mirror.c.163.com"

],

"max-concurrent-downloads": 10,

"max-concurrent-uploads": 10

}

`

参数详解:

  • storage-driver: overlay2 相比早期 overlay 性能更优,兼容性更好,是目前Linux下的推荐选择。
  • log-opts: 限制单个容器日志文件大小(100m)和保留数量(3个),避免日志爆炸撑爆磁盘。
  • default-ulimits: 调整默认文件句柄和进程数限制,应对高并发场景下"too many open files"的问题。
  • live-restore: 设为 true 后,Docker守护进程重启或升级时,正在运行的容器不会被中断——这对生产环境至关重要。
  • default-address-pools: 自定义Docker网络地址池,避免与内网网段冲突。
  • registry-mirrors: 配置国内镜像加速器,解决Docker Hub访问缓慢问题。
  • max-concurrent-downloads/uploads: 提升镜像拉取与推送的并发能力。

三、Docker-Compose项目结构与最佳实践

3.1 标准项目目录结构

一个工程化程度足够的Compose项目,目录结构应该长这样:

`

huawei80-projects/

├── docker-compose.yml # 主编排文件

├── .env # 环境变量配置(敏感信息)

├── .env.example # 环境变量模板(不含敏感值)

├── Makefile # 运维命令集合

├── nginx/

│ ├── Dockerfile

│ └── nginx.conf

├── app/

│ ├── Dockerfile

│ └── src/

├── db/

│ └── init.sql

├── backups/ # 备份文件目录

├── logs/ # 日志目录

└── data/ # 持久化卷挂载点

`

.env.env.example 分离是工程化标配——前者加进 .gitignore,后者作为团队成员的配置模板。Makefile 把常用命令(make upmake downmake logs)封装好,新人上手会顺畅很多。

3.2 版本控制与分支策略

分支用途部署环境
main稳定版本生产环境
staging预发布测试测试环境
develop开发中功能开发环境

三个分支对应三套环境,CI/CD流水线按分支自动触发部署,干净利落。


四、实战配置示例

> 说明:以下示例遵循最新的 Compose Specification 规范,不再使用顶层的 version: '3.x' 字段。如果使用 docker-compose v2(已与Docker CLI集成),可以直接忽略 version 声明。

4.1 基础Web应用栈(Nginx + PHP-FPM + MySQL)

适用于LAMP/LEMP传统Web架构的容器化部署,初创企业快速搭建官网或内部管理系统可以直接套用:

`yaml

services:

nginx:

image: nginx:1.27-alpine

container_name: huawei80-nginx

ports:

  • "80:80"
  • "443:443"

volumes:

  • ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  • ./app:/usr/share/nginx/html:ro

networks:

  • internal

restart: unless-stopped

depends_on:

php-fpm:

condition: service_started

healthcheck:

test: ["CMD", "wget", "-q", "--spider", "http://localhost/health"]

interval: 30s

timeout: 10s

retries: 3

php-fpm:

image: php:8.4-fpm-alpine

container_name: huawei80-php

working_dir: /var/www/html

volumes:

  • ./app:/var/www/html:rw

networks:

  • internal

restart: unless-stopped

environment:

PHP_MEMORY_LIMIT: 256M

PHP_MAX_EXECUTION_TIME: 60

PHP_UPLOAD_MAX_FILESIZE: 50M

PHP_POST_MAX_SIZE: 50M

healthcheck:

test: ["CMD-SHELL", "php-fpm -t || exit 1"]

interval: 30s

timeout: 10s

retries: 3

mysql:

image: mysql:8.4

container_name: huawei80-mysql

environment:

MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}

MYSQL_DATABASE: ${DB_NAME}

MYSQL_USER: ${DB_USER}

MYSQL_PASSWORD: ${DB_PASSWORD}

TZ: Asia/Shanghai

volumes:

  • mysql_data:/var/lib/mysql
  • ./db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
  • ./db/conf.d:/etc/mysql/conf.d:ro

networks:

  • internal

restart: unless-stopped

healthcheck:

test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD}"]

interval: 10s

timeout: 5s

retries: 5

deploy:

resources:

limits:

memory: 2G

networks:

internal:

driver: bridge

volumes:

mysql_data:

driver: local

`

关键配置解析:

  • depends_oncondition: service_started / service_healthy 确保依赖服务先就绪
  • healthcheck 配置健康检查,让异常容器能被及时发现并自动重启
  • deploy.resources.limits 限制单容器资源,防止内存溢出拖垮宿主机

4.2 Node.js微服务架构(API网关 + 多个微服务)

针对前后端分离的现代Web应用,适合电商平台、SaaS系统等复杂业务场景:

`yaml

services:

api-gateway:

image: nginx:1.27-alpine

container_name: huawei80-gateway

ports:

  • "80:80"
  • "443:443"

volumes:

  • ./gateway/nginx.conf:/etc/nginx/nginx.conf:ro

networks:

  • microservices

restart: unless-stopped

healthcheck:

test: ["CMD", "wget", "-q", "--spider", "http://localhost/health"]

interval: 30s

timeout: 10s

retries: 3

user-service:

image: node:20-alpine

container_name: huawei80-user-svc

working_dir: /app

command: sh -c "npm install --production && npm run start"

environment:

NODE_ENV: production

PORT: 3001

DB_HOST: postgres

DB_PORT: 5432

DB_NAME: users

DB_USER: ${POSTGRES_USER}

DB_PASSWORD: ${POSTGRES_PASSWORD}

JWT_SECRET: ${JWT_SECRET}

REDIS_HOST: redis

REDIS_PORT: 6379

volumes:

  • ./services/user-service:/app:ro
  • user_node_modules:/app/node_modules

networks:

  • microservices

restart: unless-stopped

depends_on:

postgres:

condition: service_healthy

redis:

condition: service_healthy

healthcheck:

test: ["CMD-SHELL", "wget -q --spider http://localhost:3001/health || exit 1"]

interval: 30s

timeout: 10s

retries: 3

deploy:

resources:

limits:

cpus: '1.0'

memory: 1G

order-service:

image: node:20-alpine

container_name: huawei80-order-svc

working_dir: /app

command: sh -c "npm install --production && npm run start"

environment:

NODE_ENV: production

PORT: 3002

DB_HOST: postgres

DB_PORT: 5432

DB_NAME: orders

DB_USER: ${POSTGRES_USER}

DB_PASSWORD: ${POSTGRES_PASSWORD}

REDIS_HOST: redis

REDIS_PORT: 6379

volumes:

  • ./services/order-service:/app:ro
  • order_node_modules:/app/node_modules

networks:

  • microservices

restart: unless-stopped

depends_on:

postgres:

condition: service_healthy

redis:

condition: service_healthy

healthcheck:

test: ["CMD-SHELL", "wget -q --spider http://localhost:3002/health || exit 1"]

interval: 30s

timeout: 10s

retries: 3

deploy:

resources:

limits:

cpus: '1.0'

memory: 1G

postgres:

image: postgres:16-alpine

container_name: huawei80-postgres

environment:

POSTGRES_USER: ${POSTGRES_USER}

POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

TZ: Asia/Shanghai

volumes:

  • postgres_data:/var/lib/postgresql/data

networks:

  • microservices

restart: unless-stopped

healthcheck:

test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]

interval: 10s

timeout: 5s

retries: 5

deploy:

resources:

limits:

memory: 2G

redis:

image: redis:7-alpine

container_name: huawei80-redis

command: redis-server --appendonly yes

volumes:

  • redis_data:/data

networks:

  • microservices

restart: unless-stopped

healthcheck:

test: ["CMD", "redis-cli", "ping"]

interval: 10s

timeout: 5s

retries: 5

deploy:

resources:

limits:

memory: 1G

networks:

microservices:

driver: bridge

volumes:

postgres_data:

driver: local

redis_data:

driver: local

user_node_modules:

driver: local

order_node_modules:

driver: local

`

这个例子把微服务的几个核心点都覆盖到了:API网关统一入口、服务独立伸缩、独立的node_modules卷(避免开发环境容器内依赖污染)、资源限制、健康检查。在华为80 Pro这种多核大内存平台上,单机跑一个完整的电商微服务集群基本毫无压力。


五、生产环境必备:监控、安全与备份

光是把服务跑起来还不够,生产环境还需要这几块拼图。

5.1 Prometheus + Grafana监控方案

监控这块几乎是"装上就回不去"的天花板级组件,Prometheus做时序数据采集,Grafana做可视化看板,cAdvisor做容器指标抓取:

`yaml

services:

prometheus:

image: prom/prometheus:v2.55.0

container_name: huawei80-prometheus

volumes:

  • ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
  • prometheus_data:/prometheus

ports:

  • "9090:9090"

networks:

  • monitoring

restart: unless-stopped

grafana:

image: grafana/grafana:11.2.0

container_name: huawei80-grafana

environment:

GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD}

volumes:

  • grafana_data:/var/lib/grafana

ports:

  • "3000:3000"

networks:

  • monitoring

depends_on:

  • prometheus

restart: unless-stopped

cadvisor:

image: gcr.io/cadvisor/cadvisor:v0.49.1

container_name: huawei80-cadvisor

volumes:

  • /:/rootfs:ro
  • /var/run:/var/run:ro
  • /sys:/sys:ro
  • /var/lib/docker/:/var/lib/docker:ro

ports:

  • "8080:8080"

networks:

  • monitoring

restart: unless-stopped

networks:

monitoring:

driver: bridge

volumes:

prometheus_data:

driver: local

grafana_data:

driver: local

`

5.2 容器镜像安全扫描(Trivy)

安全这事儿别心存侥幸。Trivy是开源界口碑相当不错的镜像扫描工具,能识别OS包漏洞、依赖漏洞、配置问题:

`bash

扫描本地镜像

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \

aquasec/trivy:latest image nginx:1.27-alpine

集成到CI流水线

docker run --rm -v $PWD:/project \

aquasec/trivy:latest fs --severity HIGH,CRITICAL /project

`

建议在CI流水线里加一步Trivy扫描,发现HIGH/CRITICAL级别漏洞直接阻断部署。

5.3 自动备份策略

容器化的数据备份核心是"卷"和"数据库导出"。一个简单可用的方案是用cron + docker exec:

`bash

#!/bin/bash

/opt/backup/backup.sh

BACKUP_DIR=/opt/backup/data

DATE=$(date +%Y%m%d_%H%M%S)

MySQL备份

docker exec huawei80-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' \

> $BACKUP_DIR/mysql_$DATE.sql

Postgres备份

docker exec huawei80-postgres pg_dumpall -U $POSTGRES_USER \

> $BACKUP_DIR/postgres_$DATE.sql

卷快照(需要文件系统支持)

tar -czf $BACKUP_DIR/volumes_$DATE.tar.gz /opt/data

清理7天前的备份

find $BACKUP_DIR -mtime +7 -delete

`

配到crontab每天凌晨执行一次就行:

`bash

0 2 * * * /opt/backup/backup.sh >> /var/log/backup.log 2>&1

`


六、CI/CD集成:让部署成为日常

6.1 GitHub Actions示例

`yaml

.github/workflows/deploy.yml

name: Deploy to Huawei 80 Pro

on:

push:

branches: [main, staging, develop]

jobs:

build-and-deploy:

runs-on: ubuntu-latest

steps:

  • uses: actions/checkout@v4
  • name: Login to Container Registry

uses: docker/login-action@v3

with:

registry: ${{ secrets.REGISTRY_URL }}

username: ${{ secrets.REGISTRY_USER }}

password: ${{ secrets.REGISTRY_PASS }}

  • name: Build and Push Images

run: |

docker compose -f docker-compose.yml build

docker compose -f docker-compose.yml push

  • name: Trivy Security Scan

uses: aquasecurity/trivy-action@master

with:

image-ref: '${{ secrets.REGISTRY_URL }}/app:latest'

severity: 'HIGH,CRITICAL'

exit-code: '1'

  • name: Deploy via SSH

uses: appleboy/ssh-action@v1

with:

host: ${{ secrets.SERVER_HOST }}

username: ${{ secrets.SERVER_USER }}

key: ${{ secrets.SSH_KEY }}

script: |

cd /opt/huawei80-projects

docker compose pull

docker compose up -d

docker image prune -f

`

6.2 GitLab CI示例

`yaml

stages:

  • build
  • scan
  • deploy

build:

stage: build

script:

  • docker compose build
  • docker compose push

trivy-scan:

stage: scan

image: aquasec/trivy:latest

script:

  • trivy image --severity HIGH,CRITICAL --exit-code 1 your-registry/app:latest

deploy-production:

stage: deploy

script:

  • ssh deploy@server "cd /opt/huawei80-projects && docker compose pull && docker compose up -d"

only:

  • main

`


七、常见问题与避坑指南(FAQ)

Q1:Compose文件里还要不要写 version: '3.x'

不需要。从2026年Compose v2开始,新规范已经弃用顶层 version 字段,推荐直接遵循Compose Specification。少写一行配置,反而兼容性更好。

Q2:depends_oncondition 该用 service_started 还是 service_healthy

  • service_started:只保证容器已启动,进程可能还没准备好接受连接
  • service_healthy:配合 healthcheck,能确保服务真的可用

生产环境强烈推荐用 service_healthy。 启动慢的数据库等服务尤其需要。

Q3:生产环境的 .env 文件怎么管理才安全?

  • 加入 .gitignore,禁止提交到代码仓库
  • 使用 Vault、AWS Secrets Manager、HashiCorp Vault等密钥管理服务
  • 团队内通过加密渠道(如1Password、Bitwarden Teams)共享
  • 定期轮换敏感凭据

Q4:信创场景下怎么部署Docker?

国产化替代是2026年的硬核趋势之一。在麒麟、统信、openEuler这类OS上,建议:

  • 使用对应架构(arm64/x86_64)的Docker官方构建版本
  • 关注欧拉、龙蜥等开源社区的Docker兼容仓库
  • 国产化数据库(达梦、人大金仓、OceanBase)有自己的官方镜像,直接从厂商仓库拉取

Q5:容器日志怎么统一收集?

除了daemon.json里的log-opts限制单容器日志,还可以:

  • 用 Loki + Promtail 组合做日志聚合
  • 用 ELK(Elasticsearch + Logstash + Kibana)做全文检索
  • 关键业务日志额外对接审计系统

Q6:镜像拉取慢,有啥加速方案?

  • 配置 daemon.json 的 registry-mirrors(已在前文给出示例)
  • 自建Harbor镜像仓库,团队内部镜像走内网
  • 海外业务考虑AWS ECR、Google Container Registry等海外镜像源

八、写在最后

华为80 Pro跑容器化这套组合,整体体验下来是很顺手的:多核CPU撑得住高并发场景,NVMe SSD让镜像层操作飞快,万兆网口也保证了服务间通信不卡瓶颈。配合本文给出的 daemon.json 调优、Compose文件工程化模板、监控/安全/备份方案,基本能覆盖大多数中小企业的生产环境需求。

容器化这条路一旦走顺,后面再上Kubernetes、Service Mesh的迁移成本也会低很多。说白了,今天在Compose上踩过的每一个坑、积累的每一个最佳实践,都是未来往K8s迁移时的"拿得出手"的经验。

截至2026年08月,本文配置均基于Docker Engine 27.x、Docker Compose v2、Ubuntu 24.04 LTS验证可用。遇到具体问题欢迎在评论区交流,看到都会回。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
 
加好友78950405
QQ臨時會話
華強北商行笔记本,手機
淘宝阿里旺旺
沟通交流群:
水货thinkpad笔记本
工作时间:
11:00-22:00
电话:
18938079527
微信联系我们

QQ|手机版|华强北商行 ( 粤ICP备17062346号 )

JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!

|nimba_sitemap:appname 手机端 公司简介 联系方式 版权所有@

GMT+8, 2026-9-4 13:19 , Processed in 0.013272 second(s), 6 queries , Redis On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表