搭建一个 LNMP(Linux, Nginx, MySQL/MariaDB, PHP)环境是很多 Web 开发者的常见需求,而使用 Docker 和 Dockerfile 可以极大地简化这个过程。通过 Dockerfile,你可以定义每个服务的基础镜像,并按照需要安装和配置软件。
1. 准备工作
首先,确保你已经安装了 Docker 和 Docker Compose。如果你还没有安装它们,请参考官方文档进行安装。
2. 创建项目结构
为了更好地组织代码和资源,我们建议创建如下的目录结构:
lnmp_project/
├── docker-compose.yml
├── nginx/
│ └── Dockerfile
├── php/
│ └── Dockerfile
└── mysql/
└── Dockerfile
3. 编写 Dockerfile 文件
Nginx 的 Dockerfile
在 nginx/Dockerfile
中编写如下内容:
# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:alpine
# 设置工作目录为 /var/www/html
WORKDIR /var/www/html
# 复制自定义的 Nginx 配置文件到容器中
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
# 将主机上的静态文件复制到容器内的工作目录
COPY ./html /var/www/html
# 暴露 80 端口供外部访问
EXPOSE 80
PHP 的 Dockerfile
在 php/Dockerfile
中编写如下内容:
# 使用带有 FPM 的官方 PHP 7.4 镜像作为基础镜像
FROM php:7.4-fpm-alpine
# 安装一些常用的扩展和工具
RUN set -ex \
&& apk add --no-cache \
libzip-dev \
mariadb-client \
&& docker-php-ext-install pdo_mysql zip opcache
# 设置时区为中国上海
ENV PHP时区=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$PHP时区 /etc/localtime && echo $PHP时区 > /etc/timezone
# 暴露 9000 端口给 Nginx 连接
EXPOSE