php环境搭建
造梦西游修改器下载-usb转串口
2023年4月2日发(作者:windows live id)docker前台运⾏PHP,使⽤docker搭建PHP运⾏环境
废话不多说,直接进⼊正题~
环境
Ubuntu18.4;
Dockerversion19.03.1
为了⽅便演⽰操作,简单粗暴的使⽤了sudosu获取了超级管理员权限~
MySQL
#查找镜像仓库
dockersearchmysql
#选择5.7的版本
dockerpullmysql:5.7
拉取完毕后使⽤dockerimages命令可看到已经有⼀个名为mysql:5.7的镜像了
启动⼀个MySQL的实例相当简单:
dockerrun--namemysql-p13306:3306-v/var/mysql:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=root-dmysql:5.7
--namemysql表⽰给这个容器命名为mysql,
-p13306:3306表⽰将宿主主机的13306端⼝映射到容器的3306端⼝,
-v/var/mysql:/var/lib/mysql表⽰将宿主主机的/var/mysql⽬录挂载到容器的/var/lib/mysql⽬录,MySQL就会默认将数据⽂件写⼊
这个⽬录中,
-eMYSQL_ROOT_PASSWORD=root表⽰环境变量参数,MYSQL_ROOT_PASSWORD为必填参数,指定了root⽤户的密码为root,
-d:后台运⾏容器,并返回容器ID,
mysql:5.7表⽰镜像名称和tag.
此时,已经可以通过数据库连接⼯具⽤root⽤户连接上这个数据库了.
PHP
#查找镜像仓库
dockersearchphp
#在这⾥我们选择/library/php:7.2.16-fpm的镜像
/library/php:7.2.16-fpm
拉取完毕后已经可以发现有⼀个名为/library/php:7.2.16-fpm的镜像了,
由于我们在使⽤php的时候经常要安装各种扩展,通过这些镜像创建的实例中不⼀定有我们需要的扩展,这个时候我们可以通过Dockerfile来
构建镜像,创建⼀个名为Dockerfile的⽂件,内容如下:
/library/php:7.2.16-fpm
RUNapt-getupdate
&&aptinstall-ylibwebp-devlibjpeg-devlibpng-devlibfreetype6-devlibjpeg62-turbo-devlibmemcached-devzlib1g-dev
libevent-devopenssllibssl-dev
&&peclinstalligbinary
&&docker-php-ext-install-j$(nproc)pdo_mysqlpcntlsockets
&&peclinstallredis-4.0.0event
&&docker-php-ext-enableredisevent
&&docker-php-ext-install-j$(nproc)mysqli
&&docker-php-ext-configuregd--with-webp-dir=/usr/include/webp--with-jpeg-dir=/usr/include--with-png-
dir=/usr/include--with-freetype-dir=/usr/include/freetype2
&&docker-php-ext-install-j$(nproc)gd
然后执⾏以下命令构建镜像:
dockerbuild-tphp72:ext.
**-tphp72:ext**表⽰将这个镜像命名为php72并且打上ext的tag
.表⽰执⾏命令的⼯作⽬录,也可以指定⽬录,会在该⽬录下寻找Dockerfile⽂件
构建完毕后使⽤dockerimages命令可以发现已经有个叫php72:ext的镜像了
使⽤以下命令来验证刚刚构建的镜像有没安装上所需要的扩展:
dockerrun-itphp72:extphp-m
然后创建⼀个PHP实例:
dockerrun--namephp-v/www:/usr/share/nginx/html-dphp72:ext
-v/www:/usr/share/nginx/html表⽰将⽹站根⽬录/www挂载到容器/usr/share/nginx/html中,此项设置应该跟nginx挂载⼀致,否则
php-fpm⽆法识别正确⽬录
此时已经在后台运⾏了两个容器实例了(mysql和php)
nginx
直接拉取nginx镜像:
dockerpullnginx
拉取完毕后本地镜像中会有⼀个名为nginx:latest的镜像.
我们先运⾏⼀个nginx容器:
dockerrun--namenginx-test-dnginx:latest
然后将容器中的配置⽂件复制到宿主主机中:
dockercpnginx-test:/etc/nginx/var/nginx
nginx-test:/etc/nginx表⽰名为nginx-test容器中的/etc/nginx⽬录
/var/nginx表⽰宿主主机中的⽬录
然后查看复制过来的:
vim/var/nginx/
内容如下:
usernginx;
worker_processes1;
error_log/var/log/nginx/n;
pid/var/run/;
events{
worker_connections1024;
}
http{
include/etc/nginx/;
default_typeapplication/octet-stream;
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_x_forwarded_for"';
access_log/var/log/nginx/n;
sendfileon;
#tcp_nopushon;
keepalive_timeout65;
#gzipon;
include/etc/nginx/conf.d/*.conf;
}
注意,这⾥⾯涉及的⽬录会⽐较多,后⾯我们运⾏容器的时候千万别挂载错了.
再看nginx默认的⽂件:
vim/var/nginx/conf.d/
我们将其修改为:
server{
listen80;
server_namelocalhost;
#charsetkoi8-r;
#access_log/var/log/nginx/n;
location/{
root/usr/share/nginx/html;
;
}
#error_page404/;
#redirectservererrorpagestothestaticpage/
#error_page5/;
location=/{
root/usr/share/nginx/html;
}
#proxythePHPscriptstoApachelisteningon127.0.0.1:80
##location~.php${
#}
#passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000
#location~.php${
root/usr/share/nginx/html;
fastcgi_passphp:9000;#这个php实际上是表⽰host,我们通过容器连接时可以将其命名为php
fastcgi_;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
includefastcgi_params;
}
#ssfiles,ifApache'sdocumentroot
#concurswithnginx'sone
##location~/.ht{
#denyall;
#}
}
注意我们的⽹站⽬录为/usr/share/nginx/html(针对容器⽽⾔,并不是宿主主机的⽬录,我们可以将本机的⽬录挂载到该⽬录下)
编写php⽂件:
vim/www/
内容如下:
phpinfo();
接下来我们进⾏容器连接,连接nginx和php:
dockerrun--namenginx-p80:80-v/var/nginx:/etc/nginx:ro-v/www:/usr/share/nginx/html--linkphp:php-dnginx:latest
-p80:80表⽰将宿主主机的80端⼝映射到容器的80端⼝,
-v/var/nginx:/etc/nginx:ro表⽰将宿主主机中的配置⽂件⽬录挂载到容器中(之前我们已经使⽤dockercp命令将容器中的配置⽂件复制
到宿主主机),ro表⽰只读,
-v/www:/usr/share/nginx/html表⽰将⽹站根⽬录/www挂载到容器/usr/share/nginx/html中,跟php容器挂载⼀致,
--linkphp:php表⽰将php容器和nginx的⽹络合并,并将php容器的host设置成php,映射到127.0.0.1上,这样nginx就能使⽤php:9000访
问php
访问⽹站
在浏览器中输⼊:
此时,浏览器中已经能查看phpinfo的信息.
本⽂同步发布于:有趣⽹-让编程更有趣
php环境搭建