docker安装php

news/2025/2/12 20:54:47/

在安装 php 之前,我们可以先查看一下我们的镜像:

docker images

我这里是已经存在 php 镜像了,版本就是 TAG 显示的 8.1.16

如果没有镜像,则执行下面的命令,拉取 php 镜像:

docker pull php:latest

请注意,这里使用的是 php:latest

这个 latest 代表是拉取最新的,所以如果我们有时候,团队原因,或者其他原因,我并不想要最新版本,那么就不能使用 latest,改为使用:

docker pull php:8.1.16-fpm

这样的命令,下载后的镜像,php 版本就是 8.1.16了,是我们指定的版本。

想了解更多 如何查看 docker 镜像具体什么版本,可以看一下这篇文章:

docker镜像latest具体是哪个版本_docker latest 版本_龙枫995的博客-CSDN博客其实docker也有提供镜像具体版本的获取方式。docker 中 image 镜像管理image 中有一个inspect显示一个或多个图像的详细信息那么组合一下,就是这样:https://blog.csdn.net/longfeng995/article/details/128828905?spm=1001.2014.3001.5502

好的, php 镜像我们下载好了,开始运行容器

直接就是 docker run 就行:

docker run --name  localhost-php -d php:8.1.16-fpm

运行后,出现一行 容器 ID 就代表成功了

命令中,各项参数解释:

run在新容器中运行命令
--name为容器分配一个名称。上面我们分配的名称就叫"localhost-php"
-d在后台运行container并打印容器ID

我们查看一下 容器:

docker ps

可以看到,php 容器就已经正常运行了。

以上,是最简单的,php 从下载镜像,到运行容器的流程。

这个过程,没有挂载文件,没有做任何特殊的处理。

但显然这是不行的。因为我们会搭配 nginx 一起使用对吧,并且还需要增加 挂载文件,总不能 php 的某一个配置,没有开启,我每次都进入容器内修改吧。

所以以下,是我们的进阶版,也是稍微比较复杂的!!

进阶版

首先我们需要挂载php文件,我这边总结了一下,有两点比较重要的:

1. 项目的目录

2. php.ini 配置文件

因为我们下载的镜像,是别人制作的,有时候因为版本不同等原因,所以 docker 容器内的路径,或许也会有一些不同,所以我们需要进入容器内,去找找。

进入容器命令:

docker exec -it localhost-php bash

当进入 php 容器后,这前面出现的就是 php 默认项目的目录。所以我们要记住这个目录位置:"/var/www/html"

然后是 php 的配置文件, 我经过查找,找到了是在 "/usr/local/etc/php" 这个目录下,使用命令 "ls" 就能看到:

php 的开发环境配置、生产环境配置 这些。
但是我们使用的是 "php.ini" 显然这里没有,我的理解是,如果没有 php.ini 自动默认的配置,如果存在 php.ini 就会优先这个文件。

好了,位置我们找到了,那么就开始处理:

首先,这个 php 容器我们要进行删除。为什么呢?

因为我们之前创建这个容器,是没有挂载文件的,之所以不挂在,是因为我们不知道 文件位置,现在知道了,所以重新创建一次。当然 也有将已存在的容器,进行编辑,也属于新增挂载文件。

不过我这里的处理,就比较简单粗暴了。。。

docker stop localhost-php docker rm localhost-php

执行上面的两段命令,就是 停止容器、删除容器。

然后我们再重新创建容器,但是在创建前有一些小知识需要了解一下:

  • 我们挂载文件时,建议是先在我们的环境下,先创建对应的文件
  • 例如 php.ini 文件,容器内不存在,我们自己环境下创建一个空文件,没有内容也是无意义的,所以可以先去扒一下 php.ini-product 这个文件里的内容,复制到 php.ini 里面来,如果不好扒容器内的,建议是去官方下载相对应的 php.ini 配置即可

重新创建容器的命令:

docker run --name localhost-php -p 9000:9000 -v /docker/www/html:/var/www/html -v /docker/php/localhost/php.ini:/usr/local/etc/php/php.ini -d php:8.1.16-fpm

命令中,各项参数解释:

run在新容器中运行命令
--name为容器分配一个名称。上面我们分配的名称就叫"localhost-php"
-d在后台运行container并打印容器ID
-p将容器的端口发布到。上面的"9000:9000",就是将我们的9000端口,映射到容器里的9000端口,第一个9000就是我们环境中的,第二个9000是docker容器中的
-v绑定挂载卷。就拿其中一个"/docker/www/html:/var/www/html "说明,中间有一个英文冒号":"就是将前面的目录映射到docker容器中的"/var/www/html"目录,将两者进行绑定,这样我们在"/docker/www/html"中修改,docker容器中的文件,也会相对应跟着修改

上面需要注意的是,像 "/docker/www/html" 这是我的环境目录结构,所以同学们在实验的时候,记得改成自己的目录位置

好的,php 容器运行成功,我们还需要绑定 nginx,因为 php 是脚本语言,需要服务来进行解析,我们采用 nginx

docker 安装 nginx 相关的文章,可以看一下:

docker安装Nginx_docker 上安装nginx_龙枫995的博客-CSDN博客docker安装Nginx,几条命令实现从零部署,适用于Windows,也适用linuxhttps://blog.csdn.net/longfeng995/article/details/128834889?spm=1001.2014.3001.5502

但是这里还是有些不同的,因为 php 是一个容器, nginx 也是一个容器,它们原则上是没有直接关联的,所以我们在启动 nginx 容器时,需要绑定 php 容器才行。

这里,我们的 php 容器已经启动了哈,我们来启动 nginx

docker run --name localhost-nginx -p 80:80 -v /docker/www/html:/usr/share/nginx/html -v /docker/nginx/localhost/conf/nginx.conf:/etc/nginx/nginx.conf -v /docker/nginx/localhost/conf/conf.d:/etc/nginx/conf.d -v /docker/nginx/localhost/log:/var/log/nginx --link localhost-php -d nginx:1.24

到这里,没有异常的话,我们继续往下走,如果有异常,请看一下 docker安装nginx 相关的文章。

我们打开浏览器: localhost

同学们会看到,是会显示我们的 "/docker/www/html/index.html" 这个文件内容

但是我们要用的是 php 相关的

所以我们要去修改一下 nginx 的配置。

根据 nginx 挂载文件,找到配置文件 "/docker/nginx/localhost/conf/conf.d"  都是在这个目录里的。

然后我们修改一下 默认的文件:default.conf

直接用下面的内容,覆盖原来的:

server {listen       80;server_name  localhost;root         /usr/share/nginx/html;location / {index  index.php index.html index.htm;}location ~ \.php$ {fastcgi_pass   localhost-php:9000;fastcgi_index  index.php;set $filename "index.php";if ( $fastcgi_script_name ~ "^/+(.*)$" ) {set $filename $1;}fastcgi_param  SCRIPT_FILENAME  $filename;include        fastcgi_params;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}

然后我们重启 nginx,执行下面的命令:

docker restart localhost-nginx

再去访问 localhost 就会发现:

没错,默认读取的就不再是 "/docker/www/html/index.html"

而是变成了 "/docker/www/html/index.php" 文件,php 文件优先了,因为配置原因。

测试这一步时,我们需要在 "/docker/www/html/" 目录里,增加 index.html 和 index.php 两个文件,不然就会出现 404 找不到文件了。


http://www.ppmy.cn/news/121709.html

相关文章

uniapp rpx自适应 最大宽度 960px后失效

uniapp rpx 自适应超过960px时失效 小于 960px 时 大于960px时 失效 只能自己再配置了,我用的是媒体查询 小于960px时 大于960px时 media screen and (min-width: 960px) {.content {margin: auto;display: flex;flex-flow: column;justify-content: center;wi…

数据结构之SWUSTOJ960: 双向链表的操作问题

题目&#xff1a; 解析&#xff1a; 此题时一个关于带头双向链表的问题&#xff0c;并且加入了选择排序的知识。 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct DList {int data;struct DList* next;struct DList* prev; }DL; DL* DLIn…

Camvid-720*960分辨率数据

语义分割所需要的Camvid数据集&#xff0c;通常所使用的是11个类别&#xff0c;github上有整理好的360*480分辨率的图像数据&#xff08;SegNet&#xff09;&#xff0c;本人整理了一下720*960分辨率的图像&#xff0c;百度网盘链接如下&#xff1a; http://链接&#xff1a;h…

麒麟960鸿蒙,麒麟710和麒麟960对比

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 麒麟710和麒麟960对比如下&#xff1a; 1、麒麟710同麒麟960对比规格&#xff1a;麒麟710&#xff0c;这款芯片最大的特点是省电&#xff0c;采用了Big.Little混合架构&#xff0c;…

影驰gtx960显卡怎么样_影驰gtx960 2g_影驰gtx960 2g跑分

刚到手的二手GTX960影驰虎将跑分 割版的GTX960 2G显卡&#xff0c;游戏性能只是和GTX960/1050相当。如果你只是用来玩网游戏和一般的单机游戏的话&#xff0c;倒是够用&#xff0c; 否则的话&#xff0c;建议购买二手的4G版的GTX960显卡&#xff0c;这样就可以在1080P下玩大多…

html中间部分内容宽960像素,为什么要用960px?——网页内容宽度分析

液晶还没普及的年代&#xff0c;网页设计需要考虑800600的分辨率。但如今800600的分辨率使用率不到2%&#xff0c;已经可以忽略了。比这个分辨率高一级别的1024768&#xff0c;使用率接近50%(国内)&#xff0c;所以很多网站都是以1024的宽度为标准进行设计的&#xff0c;最常见…

1280×960和720_720P,960P,1080P是什么概念?

展开全部 1、720p 720P实际是指分辨率32313133353236313431303231363533e59b9ee7ad94313334336361381280720像素—计算一下就是1280720921600像素&#xff0c;720p或720i为百万像素分辨率&#xff0c;也就是我们所说的百万网络摄像机。 2、960p 960P实际是指分辨率1280960像素 …

gtx960和gtx1060哪个好

工艺不同。GTX 960的GPU内核是28nm制造工艺&#xff0c;芯片面积达到228平方毫米 选gtx1060还是GTX960 这些点很重要!看完你就知道了 https://list.jd.com/list.html? 而GTX 1060&#xff0c;则采用了更新的16纳米工艺制程&#xff0c;芯片面积缩减到了200平方毫米。 显存容…