Docker 配置LNMP开发环境
以下是基于 Docker Compose 的一个示例配置文件,其中包括 PHP 7.1 和 7.2、MySQL 5.6、MongoDB 3.2 和 Nginx 1.10:
version: '3'
services:
php71:
build:
context: .
dockerfile: Dockerfile.php71
volumes:
- ./code:/var/www/html
ports:
- "9001:9000"
php72:
build:
context: .
dockerfile: Dockerfile.php72
volumes:
- ./code:/var/www/html
ports:
- "9002:9000"
mysql:
image: mysql:5.6
volumes:
- ./mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
mongodb:
image: mongo:3.2
volumes:
- ./mongodb:/data/db
nginx:
image: nginx:1.10
ports:
- "80:80"
volumes:
- ./code:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
以上配置文件将使用 Dockerfile.php71 和 Dockerfile.php72 构建两个不同的 PHP 版本镜像,然后将当前目录下的 code 目录挂载到这两个容器中,同时将它们的 9000 端口映射到宿主机的 9001 和 9002 端口。
MySQL 和 MongoDB 容器分别使用官方镜像,并将它们的数据目录挂载到当前目录下的 mysql 和 mongodb 目录中。
Nginx 容器使用官方镜像,并将它的 80 端口映射到宿主机的 80 端口,同时将当前目录下的 nginx/default.conf 文件挂载到容器中作为 Nginx 的配置文件。
以下是针对 PHP 7.1 和 7.2 的 Dockerfile 示例,你可以将它们分别保存到 Dockerfile.php71 和 Dockerfile.php72 文件中。
Dockerfile.php71:
FROM php:7.1-fpm
RUN apt-get update && apt-get install -y \
libzip-dev \
zlib1g-dev \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libssl-dev \
libmcrypt-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd mysqli pdo_mysql zip opcache
RUN pecl install mongodb-1.7.4 \
&& docker-php-ext-enable mongodb
RUN curl -sS <https://getcomposer.org/installer> | php \
&& mv composer.phar /usr/local/bin/composer
Dockerfile.php72:
FROM php:7.2-fpm
RUN apt-get update && apt-get install -y \
libzip-dev \
zlib1g-dev \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libssl-dev \
libmcrypt-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd mysqli pdo_mysql zip opcache
RUN pecl install mongodb-1.7.4 \
&& docker-php-ext-enable mongodb
RUN curl -sS <https://getcomposer.org/installer> | php \
&& mv composer.phar /usr/local/bin/composer
以上示例 Dockerfile 安装了一些常用的 PHP 扩展和 MongoDB 扩展,以及 Composer 包管理工具。你可以根据自己的需要修改这些 Dockerfile。然后可以在 docker-compose.yml 文件中引用它们进行构建。
以下是针对 Nginx 的默认配置文件示例,你可以保存到 nginx/default.conf 文件中。
server {
listen 80;
server_name localhost;
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_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
以上示例配置文件定义了两个 PHP-FPM 的上游服务器,分别为 php71 和 php72,然后在每个 location 中指定了相应的上游服务器。例如 /project1 的 location 中使用 PHP 7.1 的上游服务器 php71,而 /project2 的 location 中使用 PHP 7.2 的上游服务器 php72。
你可以根据实际需要修改以上配置文件,例如更改项目的目录、修改域名、添加 HTTPS 支持等。然后将其挂载到 Nginx 容器中作为配置文件。
整理文件结构
下面是一个可能的文件结构示例:
.
├── Dockerfile.php71
├── Dockerfile.php72
├── docker-compose.yml
├── nginx
│ └── default.conf
└── mysql
└── data
其中,
Dockerfile.php71
和Dockerfile.php72
分别是 PHP 7.1 和 7.2 的 Dockerfile 文件;docker-compose.yml
是 Docker Compose 配置文件,包括了 PHP、MySQL 和 Nginx 三个容器的定义;nginx
目录下的default.conf
文件是 Nginx 的默认配置文件,你可以根据实际需要进行修改;mysql/data
目录是 MySQL 数据库的数据目录,用于持久化存储数据库数据。
你可以将以上文件结构保存到一个名为 my-project
的目录下,并在该目录中运行 docker-compose up
命令启动容器。如果一切正常,你应该可以在浏览器中访问 http://localhost 来访问 Nginx 服务器,并使用 PHP 和 MySQL 容器来运行你的项目。