想象一下你有一个魔法盒子(Docker),你可以在这个盒子里创建一个小世界(容器),这个小世界里运行着 Nginx、MySQL 和 PHP,它们协同工作来提供 Web 服务。
准备工作
- 安装 Docker:首先确保你的电脑上已经安装了 Docker。如果你还没有安装,请访问 Docker 官网 下载并安装适合你操作系统的版本。
- 安装 Docker Compose(推荐):Docker Compose 可以让你更方便地管理多个容器。你可以通过包管理器或直接从 Docker Compose 官网 安装。
具体步骤
1. 创建项目目录
首先,我们需要为我们的 LNMP 项目创建一个新的文件夹。假设我们将其命名为 lnmp-docker
。
# 创建项目目录
mkdir lnmp-docker
# 进入项目目录
cd lnmp-docker
2. 创建 Docker Compose 文件
为了简化多容器应用的管理,我们将使用 Docker Compose。创建一个名为 docker-compose.yml
的文件,并添加如下内容:
version: '3'
services:
# Nginx 服务
nginx:
image: nginx:latest
ports:
- "80:80" # 将主机的 80 端口映射到容器内的 80 端口
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d # 挂载 Nginx 配置文件
- ./web:/var/www/html # 挂载网站文件
depends_on:
- php
networks:
- webnet
# PHP 服务
php:
image: php:7.4-fpm
volumes:
- ./web:/var/www/html # 挂载网站文件
networks:
- webnet
# MySQL 服务
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example # 设置 MySQL root 用户密码
MYSQL_DATABASE: testdb # 创建一个数据库
MYSQL_USER: user # 创建一个用户
MYSQL_PASSWORD: password # 设置用户的密码
volumes:
- mysqldata:/var/lib/mysql # 持久化 MySQL 数据
networks:
- webnet
volumes:
mysqldata:
networks:
webnet:
3. 创建 Nginx 配置文件
在项目根目录下创建一个 nginx
文件夹,并在里面创建一个 conf.d
文件夹和一个 default.conf
文件。default.conf
文件用于配置 Nginx 如何与 PHP-FPM 通信。
# 创建 Nginx 配置文件夹和文件
mkdir -p nginx/conf.d
touch nginx/conf.d/default.conf
编辑 nginx/conf.d/default.conf
文件,添加以下内容:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass php:9000; # 连接到 PHP-FPM 服务
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
4. 创建一个简单的 PHP 文件
在项目根目录下创建一个 web
文件夹,并在里面创建一个 index.php
文件。
# 创建网站文件夹和文件
mkdir web
touch web/index.php
编辑 web/index.php
文件,添加以下内容:
<?php
// index.php
echo "<h1>Hello, LNMP on Docker!</h1>";
5. 构建并启动容器
现在我们可以使用 Docker Compose 来构建镜像并启动容器:
# 构建镜像并启动容器
docker-compose up -d --build
这将会:
- 根据
docker-compose.yml
文件中的定义启动三个服务:Nginx、PHP 和 MySQL。 - 将主机的 80 端口映射到 Nginx 容器内的 80 端口。
- 挂载当前目录下的
web
文件夹到 Nginx 和 PHP 容器内的/var/www/html
目录,以便实时同步代码更改。 - 启动 MySQL 并设置好初始数据库和用户。
6. 测试应用程序
打开浏览器并访问 http://localhost
,你应该会看到“Hello, LNMP on Docker!” 的消息,表示 LNMP 已经成功运行在 Docker 容器中了!
总结
通过以上步骤,我们已经成功地在一个 Docker 容器中搭建了一个 LNMP 运行环境。每个步骤都帮助我们配置了所需的依赖、安装了 Nginx、PHP 和 MySQL,并确保它们可以正确协同工作。