docker安装php

news2024/12/23 10:26:56

在安装 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.coloradmin.cn/o/593676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MAYLAND HOME官网上线 | LTD家居家装行业案例分享

​一、公司介绍 在MAYLAND HOME,我们为我们对质量和服务的承诺感到自豪。我们相信我们的成功与客户的满意度直接相关,这就是为什么我们努力超越您的期望,我们承担的每一个项目。无论您是想升级您的家庭还是企业,我们都会在这里帮助…

SpringBoot3 CORS跨域访问

目录 Credentials 问题一 问题二 解决方法一 CrossOrigin,最优的方法 解决方法二 通过Filter 设置HTTP 解决方法三 通过实现WebMvcConfigurer设置HTTP HTTP 协议,需要认真的学习每个细节。 allowCredentials(true) 和 allowed-origins: "*&qu…

MySQL--万文长字探究隔离性实现原理

1 隔离性简介 事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。这篇文章旨在讲清楚…

吐血整理 二叉树(链表实现)的基本操作详解!

文章目录 节点设置二叉树的深度优先遍历前序遍历中序遍历后序遍历 二叉树的广度优先遍历层序遍历 节点的个数叶子节点的个数第K层节点的个数值为X的节点树的最大深度翻转二叉树判断两颗二叉树是否相同判断二叉树是否是完全二叉树判断二叉树是否是单值二叉树判断二叉树是否是平衡…

有哪些好用的pdf修改器?思路提供

PDF格式的文档在现代生活中扮演着越来越重要的角色。但是,要编辑或修改PDF文件是一件非常困难的事情,因为PDF文件的格式和内容通常被锁定。为了解决这个问题,出现了PDF修改器这种工具,它可以帮助用户轻松地编辑和修改PDF文件。本文…

RDK X3 Module发布,全新软硬件平台加速实现量产级产品落地

机器人开发是一段美妙的旅程。GEEKROS创始人杨状状是地平线社区的一名开发者,热衷于鼓捣各类机器人,2022年,状状第一时间就拿到了地平线旭日X3派(简称旭日X3派),基于TogetheROS™.Bot机器人操作系统&#x…

Win11集成 ChatGPT,任务栏取消分组真的回来了

时隔两月微软如期发布了 Win11 Moments 3 更新,版本号 22621.1778 。 微软这次更新带来了许多质量更新和功能改进。 直观的改动是任务栏,网络图标在连接加密隧道时会上锁,时间显示到秒也重新回归。 日常会用到的 AltTab 任务选项卡被限制到最…

04_Cenos安装Docker

docker安装文档: ubuntu:https://docs.docker.com/engine/install/ubuntu/ centos:https://docs.docker.com/engine/install/centos/ debian:https://docs.docker.com/engine/install/debian/ cenos安装Docker前提: 必…

深入理解Linux虚拟内存管理(二)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核(一) 深入理解 Linux 内核(二) Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux 设备驱动程序(三&#xf…

生态系统NPP及碳源、碳汇模拟、土地利用变化、未来气候变化、空间动态模拟实践技术

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。碳中和可以从碳排放(碳源)和碳固定(碳汇)这两个侧面来理解。陆地生态系统在全球碳循环过程中有着重要作…

加盐加密算法

文章目录 为什么需要加密?加盐加密MD5盐值加密Spring Security加盐 为什么需要加密? 从下面的图片中,可以看到用户的密码在数据库中存储时,如果不对密码加密,则是以明文的方式存储的,如果被别人获取到数据…

Mobx和Mobx-react:集中式状态管理

一、Mobx (1) Mobx是一个功能强大,上手非常容易的状态管理工具。 (2) Mobx背后的哲学很简单: 任何源自应用状态的东西都应该自动地获得。只获取与自己相关的数据,不获取无关数据(redux则相反) (3) Mobx利用getter和setter来收集组…

科技兴警,优云「公安一体化安全运维解决方案」亮相2023警博会

日前,第十一届中国国际警用装备博览会(警博会)在北京首钢会展中心成功举办,600余家企业参展,集中展示国内外前沿警用装备及尖端技术,大力推进警用装备现代化。 国内领先的平台级数字化运维软件服务商广通优…

TDengine集群搭建

我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空,直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp,6060/tcp,…

flink的几种source来源

简单的总结了flink的几种source来源,可以参考下 package com.atguigu.apitestimport java.util.Propertiesimport org.apache.flink.api.common.serialization.SimpleStringSchema import org.apache.flink.streaming.api.functions.source.SourceFunction import …

涨点技巧:注意力机制---Yolov8引入Resnet_CBAM,CBAM升级版

1.计算机视觉中的注意力机制 一般来说,注意力机制通常被分为以下基本四大类: 通道注意力 Channel Attention 空间注意力机制 Spatial Attention 时间注意力机制 Temporal Attention 分支注意力机制 Branch Attention 1.1.CBAM:通道注意力和空间注意力的集成者 轻量级…

版本控制系统有哪些推荐? - 易智编译EaseEditing

以下是几个常用的版本控制系统(Version Control System)推荐,并对它们进行简单介绍: Git: Git是目前最流行的分布式版本控制系统。它具有高效、灵活和强大的功能,支持快速的代码提交、分支管理、合并操作…

高频面试八股文原理篇(五)索引相关

目录 索引的优缺点 MySQL索引类型 索引原理 常见索引类型 MySQL数据库要⽤B树存储索引⽽不⽤红⿊树、B树、 Hash的原因 怎么验证 MySQL 的索引是否满足需求 聚簇索引和非聚簇索引 索引的优缺点 索引的优点 可以大大加快数据的检索速度,这也是创建索引的最主…

蚂蚁Ant Design组件库的免费在线资源

Ant Design(蚂蚁组件)是蚂蚁集团体验技术部经过大量项目实践和总结,逐步打磨出的一个设计系统,内含带有 React 的 UI 库。它是为企业级产品设计而创建的。Ant Design 提供了高质量的交互界面设计组件和演示。作为 UI 设计师&#…

Spring:Spring框架结构 ②

一、结构体现的价值 1、可读性强。 2、可维护性。 3、优秀的框架均具有分而治之的思想。清晰的设计、合理的归类、模块化是走向优秀框架的基础性武器。 二、Spring框架的模块划分 1、整体轮廓 Spring框架包含的功能大约由20个小模块组成。这些模块按组可分为核心容器(Core Co…