基于 Docker Compose 的 LNMP 环境容器化部署
·
- 核心逻辑:用 Compose 定义多容器关系 → 挂载代码 / 配置 → 初始化数据库权限 → 验证访问;
- 核心价值:环境隔离、一键部署、可移植(换服务器只需复制
myweb目录 + 启动命令)。
前置条件:服务器已安装 Docker + Docker Compose
# 快速安装(以 CentOS/OpenEuler 为例)
yum install -y docker-compose docker
systemctl start docker && systemctl enable docker
创建目录结构
mkdir -p /root/myweb/{php,www}
cd /root/myweb
编写 PHP 的 Dockerfile
# 编辑 php/Dockerfile
cat > php/Dockerfile << EOF
FROM php:8.1-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libzip-dev \
zlib1g-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j\$(nproc) gd pdo_mysql mysqli \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
EOF
编写 docker-compose.yml 注:MySQL 8.0 密码必须复杂(大小写 + 数字 + 特殊字符),否则自定义密码失效;
# 编辑 docker-compose.yml
cat > docker-compose.yml << EOF
version: '3'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./www:/var/www/html
depends_on:
- php
php:
build: ./php
volumes:
- ./www:/var/www/html
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: '@Root110120' # 复杂密码,避免初始化失败
MYSQL_DATABASE: myweb # 自动创建数据库
MYSQL_ROOT_HOST: "%" # 允许root远程登录
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
EOF
编写 Nginx 配置文件(解析 PHP)
# 编辑 nginx.conf
cat > nginx.conf << EOF
server {
listen 80;
root /var/www/html;
index index.php index.html;
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location ~ \.php\$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
}
}
EOF
创建测试 PHP 文件(验证环境)
# 编辑 www/index.php
cat > www/index.php << EOF
<?php
echo "✅ 网站运行成功!<br>";
echo "PHP 版本:" . phpversion() . "<br>";
// 测试 MySQL 连接
\$link = mysqli_connect('mysql', 'root', '@Root110120', 'myweb');
if (\$link) {
echo "✅ MySQL 连接成功!";
} else {
echo "❌ MySQL 连接失败:" . mysqli_connect_error();
}
?>
EOF
启动整套服务
# 先删除旧数据卷(避免密码残留,首次启动可跳过,若之前失败必执行)
docker volume rm myweb_mysql_data 2>/dev/null
# 启动服务(--build 重建 PHP 镜像)
docker compose up -d --build
验证最终效果(3 个容器均为 Up)
docker compose ps
浏览器访问:http://你的服务器IP/index.php,显示:
✅ 网站运行成功!
PHP 版本:8.1.34
✅ MySQL 连接成功!
常用运维命令(后续管理环境用)
# 重启所有服务
docker compose restart
# 停止所有服务(保留容器)
docker compose stop
# 停止并删除容器(保留数据卷)
docker compose down
# 查看日志(排错用)
docker compose logs nginx # 看 Nginx 日志
docker compose logs mysql # 看 MySQL 日志
更多推荐
所有评论(0)