docker 使用官方镜像搭建 PHP 环境

一、所需环境:

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
相关推荐
java_logo9 分钟前
Docker 部署 Portainer CE:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer-ce
ESDWAN13 分钟前
海外股票网络环境优化与交易场景应用:从行情获取到交易系统稳定性设计
开发语言·网络·php
Wang's Blog42 分钟前
Java 项目部署之 Docker工具快速入门: 自定义镜像的分层结构与写时复制
java·开发语言·docker
WeiXin_DZbishe9 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
WeiXin_DZbishe11 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
WeiXin_DZbishe12 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
VIP_CQCRE13 小时前
给团队搭一个 AI 工作台:Open WebUI 接入 Ace Data Cloud 实战
docker·ai·rag·open webui·ace data cloud
Hum8le15 小时前
漏洞知识点《php伪协议》
开发语言·安全·web安全·php
程序员老赵17 小时前
Docker 部署 Portainer CE:轻松搭建容器管理平台
docker·容器·开源