docker 使用官方镜像搭建 PHP 环境
由于 PHP、Nginx、MySQL的有些文件需要从容器中复制到宿主机,直接使用数据卷的话,安装会出现一些问题,所以安装之前,需要进行文件的复制。先简单的启动容器,复制文件成功后,再删除对应的容器。b)、Nginx:nginx.conf 是文件。/var/www 是存放PHP代码的目录。a)、PHP:php-fpm.d、php 这两个都是目录。1、PHP:7.4.33-fpm 的版本。2、Ngin
·
一、所需环境:
1、PHP:7.4.33-fpm 的版本
2、Nginx:1.25.1 的版本
3、MySQL: 5.7 的版本
4、Redis:7.0 的版本
1.1、拉取官方的镜像
docker pull php:7.4.33-fpm
docker pull nginx:1.25.1
docker pull mysql:5.7
docker pull redis:7.0
二、安装
2.1、 备注说明
本次安装使用 docker-compose 进行安装。 由于 PHP、Nginx、MySQL的有些文件需要从容器中复制到宿主机,直接使用数据卷的话,安装会出现一些问题,所以安装之前,需要进行文件的复制。 先简单的启动容器,复制文件成功后,再删除对应的容器。
2.2、启动容器
docker run --name nginx -p 80:80 -d nginx:1.25.1 /bin/bash
docker run --name php74 -it php:7.4.33-fpm /bin/bash
docker run --name mysql57 -it mysql:5.7 /bin/bash
2.3、复制文件
a)、PHP:php-fpm.d、php 这两个都是目录
docker cp php74:/usr/local/etc/php-fpm.d /var/docker-data/php/php-fpm.d
docker cp php74:/usr/local/etc/php /var/docker-data/php/conf.d
b)、Nginx:nginx.conf 是文件。 /var/www 是存放PHP代码的目录
docker cp nginx:/etc/nginx/nginx.conf /var/docker-data/nginx/nginx.conf
docker cp nginx:/etc/nginx/conf.d /var/docker-data/nginx/conf.d
docker cp nginx:/usr/share/nginx/html /var/www/
c)、MySQL
docker cp mysql57:/etc/my.cnf /var/docker-data/mysql/my.cnf
PHP、Nginx的目录结构:
2.4、删除容器:
docker rm -f php74
docker rm -f nginx
docker rm -f mysql57
2.5、编写 docker-compose.yml 文件。
docker-compose.yml 文件放在了最后
三、简单测试:
Nginx 配置:
server {
listen 80;
listen [::]:80;
server_name localhost;
root /var/www/test;
#access_log /var/log/nginx/host.access.log main;
location / {
index index.html index.htm index.php;
autoindex off;
}
location ~ \.php(.*)$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
四、docker-compose.yml
version: '3.8'
services:
php:
container_name: php74
image: php:7.4.33-fpm
restart: always
privileged: true
ports:
- "9000:9000"
volumes:
- "/var/www:/var/www" # php代码目录
- "/var/docker-data/php/conf.d:/usr/local/etc/php"
- "/var/docker-data/php/php-fpm.d:/usr/local/etc/php-fpm.d"
nginx:
container_name: nginx
image: nginx:1.25.1
privileged: true
restart: always
environment:
- TZ=Asia/Shanghai
ports:
- "80:80"
- "443:443"
depends_on:
- "php"
volumes:
- "/var/docker-data/nginx/nginx.conf:/etc/nginx/nginx.conf" # 主配置文件-不是目录
- "/var/docker-data/nginx/conf.d:/etc/nginx/conf.d"
- "/var/www:/var/www" # php代码目录
- "/var/docker-data/nginx/log:/var/log/nginx"
mysql:
image: mysql:5.7
container_name: mysql57
privileged: true
restart: always
ports:
- "3306:3306"
volumes:
- /var/docker-data/mysql/data:/var/lib/mysql # mysql数据目录
- /var/docker-data/mysql/my.cnf:/etc/my.cnf
- /var/docker-data/mysql/log:/var/log/mysql
- /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题
environment:
- MYSQL_ROOT_PASSWORD=123456 # root账户密码
redis:
image: redis:7.0
container_name: redis
privileged: true
restart: always
ports:
- "6379:6379"
command: redis-server /usr/local/redis/conf/redis.conf
volumes:
- /var/docker-data/redis/data:/data
- /var/docker-data/redis/conf/redis.conf:/usr/local/redis/conf/redis.conf
更多推荐
已为社区贡献1条内容
所有评论(0)