1. 首页 > Linux教程 > 正文

Linux教程FG491-Linux容器编排实战

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

本文档介绍Linux容器编排实战案例。

风哥提示:

Part01-Docker Compose编排

1.1 多容器应用编排

# 创建项目目录
[root@fgedu-app ~]# mkdir -p /opt/fgedu-app
[root@fgedu-app ~]# cd /opt/fgedu-app

# 创建docker-compose.yml
[root@fgedu-app fgedu-app]# cat > docker-compose.yml << 'EOF' version: '3.8' services: nginx: image: nginx:1.25 container_name: fgedu-nginx ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/ssl:/etc/nginx/ssl - ./html:/usr/share/nginx/html depends_on: - php - mysql networks: - fgedu-net restart: always php: image: php:8.2-fpm container_name: fgedu-php volumes: - ./html:/usr/share/nginx/html - ./php/php.ini:/usr/local/etc/php/php.ini networks: - fgedu-net restart: always mysql: image: mysql:8.0 container_name: fgedu-mysql environment: MYSQL_ROOT_PASSWORD: MySQL@123 MYSQL_DATABASE: fgedu_db MYSQL_USER: fgedu MYSQL_PASSWORD: Fgedu@123 volumes: - mysql-data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d networks: - fgedu-net restart: always redis: image: redis:7 container_name: fgedu-redis command: redis-server --requirepass Redis@123 volumes: - redis-data:/data networks: - fgedu-net restart: always networks: fgedu-net: driver: bridge volumes: mysql-data: redis-data: EOF # 启动服务 [root@fgedu-app fgedu-app]# docker-compose up -d Creating network "fgedu-app_fgedu-net" with driver "bridge" Creating volume "fgedu-app_mysql-data" with default driver Creating volume "fgedu-app_redis-data" with default driver Creating fgedu-redis ... done Creating fgedu-mysql ... done Creating fgedu-php ... done Creating fgedu-nginx ... done # 查看服务状态 [root@fgedu-app fgedu-app]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------- fgedu-mysql docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp fgedu-nginx /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
fgedu-php docker-php-entrypoint php-fpm Up 9000/tcp
fgedu-redi学习交流加群风哥QQ113257174s docker-entrypoint.sh redis … Up 6379/tcp

Part02-服务扩缩容

2.1 动态扩容操作

# 扩容PHP服务
[root@fgedu-app fgedu-app]# docker-compose up -d –scale php=3
fgedu-app_php_1 is up-to-date
Creating fgedu-app_php_2 … done
Creating fgedu-app_php_3 … done

# 查看服务
[root@fgedu-app fgedu-app]# docker-compose ps
Name Command State Ports
—————————————————————————
fgedu-mysql docker-entrypoint.sh mysqld Up 3306/tcp
fgedu-nginx /docker-entrypoint.sh ngin … Up 0.0.0.0:80->80/tcp
fgedu-app_php_1 docker-php-entrypoint php-fpm Up 9000/tcp
fgedu-app_php_2 docker-php-entrypoint php-fpm Up 9000/tcp
fgedu-app_php_3 docker-php-entrypoint php-fpm Up 9000/tcp
fgedu-redis docker-entrypoint.sh redis … Up 6379/tcp

# 配置Nginx负载均衡
[root@fgedu-app fgedu-app]# cat > nginx/conf.d/default.conf << 'EOF' upstream php_backend { server fgedu-app_php_1:9000; server fgedu-app_php_2:9000; server fgedu-app_php_3:9000; } server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.php index.html; location ~ \.php$ { fastcgi_pass php_backend; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } EOF # 重载Nginx配置 [root@fgedu-app fgedu-app]# docker-compose restart nginx Restarting fgedu-nginx ... done

Part03-服务更新

3.1 滚动更新配置

# 更新服务镜像
[root@fgedu-app fgedu-app]# docker-compose pull
Pulling nginx … done
Pulling php … done
Pulling mysql … done
Pulling redis … done

# 滚动更新服务
[root@fgedu-app fgedu-app]# docker-compose up -d –no-deps –build php
Building php
Step 1/5 : FROM php:8.2-fpm
—> abc123def456
Step 2/5 : RUN docker-php-ext-install mysqli pdo_mysql
—> Running in def456ghi789
Removing intermediate container def456ghi789
—> ghi789jkl012
Successfully built ghi789jkl012
Creating fgedu-app_php_1 … done
Creating fgedu-app_php_2 … done
Creating fgedu-app_php_3 … done

# 查看更新日志
[root@fgedu-app fgedu-app]# docker-compose logs –tail=50 php
Attaching to fgedu-app_php_1, fgedu-app_php_2, fgedu-app_php_3
fgedu-app_php_1|[04-Apr-2026 23:00:00] NOTICE: fpm is running, pid 1
fgedu-app_php_1|[04-Apr-2026 23:00:00] NOTICE: ready to handle connections

Part04-监控与日志

4.1 容器监控配置

# 查看容器资源使用
[root@fgedu-app fgedu-app]# docker stats –no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
abc123def456 fgedu-nginx 0.05% 15.5MiB / 31.25GiB 0.05% 1.5MB / 500kB 10MB / 5MB 5
def456ghi789 fgedu-php 0.10% 50.2MiB / 31.25GiB 0.16% 2MB / 1MB 20MB / 10MB 10
ghi789jkl012 fgedu-mysql 0.50% 200.5MiB / 31.25GiB 0.63% 5MB / 2MB 100MB / 50M更多学习教程公众号风哥教程itpux_comB 30
jkl012mno345 fgedu-redis 0.02% 10.1MiB / 31.25GiB 0.03% 500kB / 200kB 5MB / 2MB 5

# 配置日志驱动
[root@fgedu-app fgedu-app]# cat > docker-compose.yml << 'EOF' version: '3.8' services: nginx: image: nginx:1.25 logging: driver: "json-file" options: max-size: "10m" max-file: "3" # ... 其他配置 EOF # 查看容器日志 [root@fgedu-app fgedu-app]# docker-compose logs -f nginx Attaching to fgedu-nginx fgedu-nginx|192.168.1.100 - - [04/Apr/2026:23:00:00 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0" fgedu-nginx|192.168.1.101 - - [04/Apr/2026:23:00:05 +0800] "GET /api/users HTTP/1.1" 200 1234 "-" "curl/7.68.0" # 创建健康检查脚本 [root@fgedu-app fgedu-app]# cat > health-check.sh </dev/null)
health=$(docker inspect -f ‘{{.State.Health.Status}}’ $container 2>/dev/null)

if [ “$status” == “running” ]; then
echo “$container: 运行中 (健康状态: ${health:-N/A})”
else
echo “$container: 已停止”
fi
done

echo “=== 检查完成 ===”
EOF

[root@fgedu-app fgedu-app]# chmod +x health-check.sh

风哥针对容器编排建议:

  • 使用Docker Compose管理多容器应用
  • 配置服务依赖关系
  • 实施健康检查机制
  • 配置日志收集和轮转
  • 定期备份持久化数据

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息