内容简介:本文风哥教程参考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 动态扩容操作
[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 <
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
