Docker搭建PHP运行环境完整步骤(图文教程)

 更新时间:2023年09月18日 10:50:40   作者:Super乐  
PHP是一种广泛使用的编程语言,被用于Web开发和服务器管理等各种用途,而Docker则是一种非常流行的容器化平台,可以方便地管理应用程序和环境,这篇文章主要给大家介绍了关于Docker搭建PHP运行环境的完整步骤,需要的朋友可以参考下

Docker 安装 PHP

这里我们拉取官方的镜像,标签为7.1-fpm 

docker pull php:7.1-fpm

 等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为7.1-fpm的镜像。

Docker 安装 Nginx 

 访问 Nginx 镜像库地址:https://hub.docker.com/_/nginx?tab=tags。

可以通过 Sort by 查看其他版本的 Nginx,默认是最新版本 nginx:latest。 

这里我们拉取官方的最新版本的镜像: 

docker pull nginx:latest

 使用以下命令来查看是否已安装了 nginx:

运行nginx容器

安装完成后,我们可以使用以下命令来运行 nginx 容器:

docker run --name nginx-test -p 8080:80 -d nginx

参数说明:

  • --name nginx-test:容器名称。
  • -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
  • -d nginx: 设置容器在在后台一直运行

nginx安装成功

最后我们可以通过浏览器可以直接访问 8080 端口的 nginx 服务: 

Nginx + PHP 部署PHP项目

启动 PHP: 

docker run --name  myphp-fpm -p 9000:9000 -v /var/www/blog:/www  -d php:7.1-fpm

命令说明:

  • --name myphp-fpm : 将容器命名为 myphp-fpm。

  • -v /var/www/blog:/www : 将主机中PHP项目目录挂载到容器的 /www目录,在容器内访问 /www 就相当于访问宿主机的 /var/www/blog

  • php:7.1-fpm 镜像名

创建一个存放nginx配置文件的目录。这个目录等下要挂载到容器里。

mkdir -p /opt/docker/nginx/conf.d

创建一个空配置文件

vim testdocker.conf

 在该目录下添加 /opt/docker/nginx/conf.d/testdocker.conf 文件,内容如下:

server {
    # 监听端口。此端口不能被占用了
    listen       80;
    # 此站点的域名。直接在宿主机配置一个host域名,或者在阿里云等云服务商那里解析过来。
    server_name  www.testdocker.com;
    # 此站点的入口目录。这里要注意,/www/public/ 路径是容器内的路径。因为等下会把宿主机的项目路径挂载到容器内的 /www 目录。所以这里访问 /www就相当于访问宿主机的项目路径。
    root  /www/public/;
    #配置url的伪静态设置
    location / {
       autoindex off;
       if (!-e $request_filename){
          rewrite ^/(.*)$ /index.php?/$1 last;        break;
       }
       #伪静态设置
       try_files $uri $uri/ /index.php$is_args$query_string;
       index index.php index.html index.htm;
    }
    #配置url处理及转发PHP请求
    location ~ \.php(/|$) {
        # 入口文件
        fastcgi_index index.php;
        # PHP项目的IP和端口。这是php-fpm的地址。由于nginx处理不了PHP代码,所以需要把请求转发给php-fpm进行处理。
        fastcgi_pass  10.10.10.68:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
    # 用户的访问日志。注意,这目录必须存在,否则nginx将启动不了。由于我把宿主机的项目路径www挂载到了容器内的/www目录,所以宿主机的项目路径www里需要有wwwlogs目录。
    access_log  /var/log/nginx/docker_nginx_access.log;
    # 错误日志
    error_log  /var/log/nginx/docker_nginx_error.log;
}

配置文件说明:

  • 10.10.10.68:9000:表示 php-fpm 服务的 URL,下面我们会具体说明。
  • root  /www/public/:项目的根目录,这里之所以写成( /www/public),是因为在启动PHP时,已经将项目的根目录(/var/www/blog)挂载到容器内的/www目录了

启动 nginx:

docker run --name my-nginx -p 80:80 -d -v /var/www/blog:/www -v /opt/docker/nginx/conf.d:/etc/nginx/conf.d nginx
  • -v /var/www/blog:/www 把宿主机的项目目录 /var/www/blog 挂载到容器内的 /www 目录。容器内访问 /www 就相当于访问 /var/www/blog
  • -v /opt/docker/nginx/conf.d:/etc/nginx/conf.d 把宿主机的配置目录,挂载到容器内nginx的配置目录。nginx 会自动去加载这目录内所有的配置文件。/opt/docker/nginx/conf.d 里建议每个站点对应一个配置文件。
  • -d 后台静默运行

查看正在运行的容器: 

真确的结果如下图(图一):

错误的结果如下图(图二):

图一和图二的区别:

图一端口(9000)生效,图二端口(9000)没生效,如果php-fpm没有端口,最后导致的结果就是,客户端通过域名访问项目,在通过nginx请求php-fpm时会提示:502

nginx错误提示是:connect() failed (111: Connection refused) while connecting to upstream

访问域名测试搭建结果

Docker相关命令描述

docker container attach     附加到正在运行的容器
docker container commit     从容器的更改创建一个新的映像
docker container cp         在容器和本地文件系统之间复制文件/文件夹
docker container create     创建一个新的容器
docker container diff       检查容器文件系统上文件或目录的更改
docker container exec       在运行容器中运行命令
docker container export     将容器的文件系统导出为tar存档
docker container inspect    显示一个或多个容器的详细信息
docker container kill       杀死一个或多个运行容器
docker container logs       获取容器的日志
docker container ls         列出容器
docker container pause      暂停一个或多个容器内的所有进程
docker container port       列出端口映射或容器的特定映射
docker container prune      取出所有停止的容器
docker container rename     重命名容器
docker container restart    重新启动一个或多个容器
docker container rm         删除(移除)一个或多个容器
docker container run        在新容器中运行命令
docker container start      启动一个或多个停止的容器
docker container stats      显示容器的实时流资源使用统计信息
docker container stop       停止一个或多个运行容器
docker container top        显示容器的正在运行的进程
docker container unpause    取消暂停一个或多个容器内的所有流程
docker container update     更新一个或多个容器的配置
docker container wait       阻止一个或多个容器停止,然后打印退出代码
以上命令中的 container 可以省略不写,
例如命令:docker container stop 容器ID/容器名称 等同 docker stop 容器ID/容器名称

总结 

到此这篇关于Docker搭建PHP运行环境的文章就介绍到这了,更多相关Docker搭建PHP运行环境内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解Docker Load和Docker Import的区别详解

    深入理解Docker Load和Docker Import的区别详解

    Docker是一个流行的容器化平台,提供了丰富的命令和功能,其中docker load和docker import是两个常用的命令,用于加载Docker镜像,这篇文章主要给大家介绍了关于Docker Load和Docker Import区别的相关资料,需要的朋友可以参考下
    2024-03-03
  • 使用Docker部署MySQL 5.7&8.0主从集群的方法步骤

    使用Docker部署MySQL 5.7&8.0主从集群的方法步骤

    这篇文章主要介绍了使用Docker部署MySQL 5.7&8.0主从集群的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Docker service命令详解(小结)

    Docker service命令详解(小结)

    这篇文章主要介绍了Docker service命令详解(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • CentOS7 禁用Transparent Huge Pages的实现方法

    CentOS7 禁用Transparent Huge Pages的实现方法

    这篇文章主要介绍了 CentOS7 禁用Transparent Huge Pages的实现方法的相关资料,需要的朋友可以参考下
    2016-11-11
  • docker 安装 zeppeline的操作

    docker 安装 zeppeline的操作

    Zeppelin是基于Jupyter Notebook技术开发的大数据交互分析服务软件。接下来通过本文给大家介绍docker 安装 zeppeline的相关知识,感兴趣的朋友一起看看吧
    2022-01-01
  • Ubuntu Docker安装并使用的方法

    Ubuntu Docker安装并使用的方法

    最近在学习docker,本文就从入门开始介绍Ubuntu Docker安装并使用的方法,具有一定的参考价值,感兴趣的可以了解一下
    2021-09-09
  • docker容器配置启动参数

    docker容器配置启动参数

    通过添加参数,我们可以在启动 Docker 容器时灵活地配置容器的行为,本文介绍了通过命令行和 Dockerfile 两种方式添加参数的方法,并给出了常用参数的示例,希望本文能帮助您理解如何在 Docker 启动时添加参数,并正确地配置和管理 Docker容器
    2023-10-10
  • Docker配置文件docker-compose.yml使用指南

    Docker配置文件docker-compose.yml使用指南

    本文主要介绍了Docker配置文件docker-compose.yml使用指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Docker部署golang环境详解

    Docker部署golang环境详解

    最近想学习一下golang,自己之前一直把环境全部安装在docker上,所以这次也想把golang的环境安装在docker上,先不废话,直接上手
    2022-08-08
  • docker启动容器服务后访问失败的解决方案

    docker启动容器服务后访问失败的解决方案

    初学Docker容器的基本操作,拉取了tomcat镜像,输入运行容器命令运行容器一系列操作都没有问题,但是在浏览器访问端口时却访问不到,下面这篇文章主要给大家介绍了关于docker启动容器服务后访问失败的解决方案,需要的朋友可以参考下
    2023-05-05

最新评论