详解 CentOS 9 Stream 中 Docker Compose 使用:部署多容器应用(Nginx+MySQL+PHP)
【代码】详解 CentOS 9 Stream 中 Docker Compose 使用:部署多容器应用(Nginx+MySQL+PHP)
·
CentOS 9 Stream 中 Docker Compose 部署多容器应用(Nginx+MySQL+PHP)
1. 环境准备
- 安装 Docker:
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io sudo systemctl enable --now docker - 安装 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
2. 项目结构
project/
├── docker-compose.yml
├── nginx/
│ └── nginx.conf
├── php/
│ └── Dockerfile
└── html/
└── index.php
3. 配置文件详解
(1) docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./html:/var/www/html
depends_on:
- php
networks:
- app-network
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: user_pass
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
php:
build: ./php
volumes:
- ./html:/var/www/html
environment:
- MYSQL_HOST=mysql
networks:
- app-network
volumes:
mysql-data:
networks:
app-network:
driver: bridge
(2) Nginx 配置 (nginx/nginx.conf)
events {}
http {
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
}
(3) PHP Dockerfile (php/Dockerfile)
FROM php:8.2-fpm
RUN docker-php-ext-install mysqli pdo pdo_mysql
(4) PHP 测试文件 (html/index.php)
<?php
$servername = "mysql";
$username = "app_user";
$password = "user_pass";
$dbname = "app_db";
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "MySQL connected successfully!";
phpinfo();
?>
4. 启动与验证
- 构建并启动服务:
docker-compose up -d --build - 验证容器状态:
输出应显示三个容器状态为docker-compose psrunning:Name Command State Ports ----------------------------------------------------------------- project-mysql-1 docker-entrypoint.sh mysqld Up 3306/tcp project-nginx-1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp project-php-1 docker-php-entrypoint php-fpm Up 9000/tcp - 访问测试:
- 浏览器访问
http://<服务器IP>显示:MySQL connected successfully! [PHP 信息页面]
- 浏览器访问
5. 管理命令
| 操作 | 命令 |
|---|---|
| 停止服务 | docker-compose down |
| 查看日志 | docker-compose logs -f |
| 进入容器 | docker exec -it <容器名> bash |
| 删除持久化数据 | docker-compose down -v |
6. 常见问题解决
- Nginx 502 Bad Gateway:
- 检查 PHP 容器是否运行:
docker-compose ps - 确认
fastcgi_pass php:9000配置正确
- 检查 PHP 容器是否运行:
- MySQL 连接失败:
- 在 PHP 容器内测试连接:
docker exec -it project-php-1 bash mysql -h mysql -u app_user -p
- 在 PHP 容器内测试连接:
- 文件权限问题:
- 在宿主机执行:
chmod -R 755 html/
- 在宿主机执行:
提示:生产环境需加强安全措施:
- 替换 MySQL 默认密码
- 限制 Nginx 目录访问权限
- 使用 HTTPS 加密传输
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)