PHP开发环境中的一些服务之间是需要通信的,例如nginx和php-fpm,PHP和MySQL,PHP和redis等都需要通信,如果采用宿主机端口映射的方式可以满足网络通信但是效率和安全性都会减弱,所以可以使用Docker的网络指令来构建一个互通的网络,下面列出常用的网络命令。
创建网络
docker network create dev-net --driver bridge
查看网络
docker network ls
删除网络
docker network rm 网络名称
假设创建了一个dev-net的网络,在使用docker run 创建容器的时候加上--network dev-net参数即可将容器加入此网络,加入到同一网络的服务是可以使用容器名称进行通信的,有了这层桥接网络PHP各个组件服务之间的通信就很容易解决了,首先拉取镜像
docker pull php:7.3-fpm
docker pull nginx
docker pull mysql:latest
docker pull redis:latest
假设我们需要将代码放置在目录/home/wwwroot/default/,首先需要执行mkdir -p /home/wwwroot/default/ 创建目录
然后执行启动各个容器 例如:
#第一次运行时需要设置mysql密码
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d --network dev-net mysql:latest \
--default-authentication-plugin=mysql_native_password
#nginx默认的web目录是/usr/share/nginx/html 和宿主目录 /home/wwwroot/default/做一个映射关系
docker run -p 80:80 -v /home/wwwroot/default/:/usr/share/nginx/html \
--name nginx80 --network dev-net -d nginx:latest
#PHP中的目录也做同样的映射
docker run --name php-fpm --network dev-net -d \
-v /home/wwwroot/default/:/usr/share/nginx/html php:7.3-fpm
#运行redis
docker run -d --name redis redis:latest
容器启动后需要配置nginx和php-fpm之间进行通信
#从nginx容器拷贝配置文件到宿主机的当前目录
docker cp nginx80:/etc/nginx/conf.d/default.conf ./
#编辑配置文件
vi default.conf
将nginx的配置文件修改如下
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
拷贝配置文件到nginx容器内
docker cp ./default.conf nginx80:/etc/nginx/conf.d/default.conf
进入nginx容器内部重新载入nginx配置
docker exec -it nginx80 /bin/bash
#重新载入nginx配置
/usr/sbin/nginx -s reload
#退出容器
exit
在宿主机的/home/wwwroot/default/目录创建php文件然后测试访问效果,可以看到php能够正常解析
安装对应的扩展
#进入PHP容器内
docker exec -it php-fpm /bin/bash
#例如安装pdo pdo_mysql等扩展
docker-php-ext-install pdo pdo_mysql mysqli
#安装redis时因为容器内的/usr/src/php/ext/目录中没有redis扩展包 所以需要先下载拷贝到容器内,否则会报错
docker-php-ext-install redis
#pecl扩展也可以按如下方式执行(会自动下载对应的扩展包)
pecl install redis-4.2.0 && docker-php-ext-enable redis
安装完扩展后需要重启容器
docker restart php-fpm
环境搭建完毕后使用php连接MySQL时会提示连接拒绝,可以通过修改mysql服务器中mysql数据库中的user表中的Host字段的值来实现
#进入mysql容器内
docker exec -it mysql /bin/bash
#登录MySQL
mysql -uroot -proot
#执行修改语句 语句中的php-fpm指的是php容器的名称
update user set Host='php-fpm' where User='root' and Host='localhost';
flush privileges;
exit;
exit
设置完毕后再次测试,PHP可以连接到MySQL服务器了.
使用phpMyAdmin操作容器内的MySQL数据库方法
1.下载phpMyadmin到web目录(只要能够使用url地址访问到的目录或者子目录都可以)
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.zip
2.解压
unzip phpMyAdmin-4.8.4-all-languages.zip
#重命名
mv phpMyAdmin-4.8.4-all-languages phpmyadmin
3.修改配置
cd phpmyadmin
mv config.sample.inc.php config.inc.php
vi config.inc.php
将$cfg['Servers'][$i]['host'] = 'localhost';修改为$cfg['Servers'][$i]['host'] = 'mysql';
备注:$cfg['Servers'][$i]['host'] = 'mysql'; 中的mysql指的是mysql容器的名称
接下来可以使用浏览器访问phpmyadmin并登陆mysql
-
接下来可以使用浏览器访问:求找个卖小电影的QQ-看小视频资源的微信推荐(0) 回复 (0)
-
“这也太过分了!游客还没有买卖自由吗?”“一定要严惩,绝不姑息!”“太离谱了,希望可以加强管理!”近年来,景区内强买强卖的负面新闻频发。这种问题的存在,不仅伤害了游客,也对地方旅游形象造成了巨大影响。打击强制购物,根治旅游顽疾,须各地旅游部门与公安、市场监管、商务等部门加强联合执法,加强整治力度,加大打击力度。禁止强迫购物是广大游客最朴素最迫切的基本诉求,各地要进一步完善法律法规和服务标准,建立健全旅游市场治理长效机制,监管部门也要认真履职、严格尽责,有担当有作为。 福彩3D 体彩排列3 快乐8 查看开奖结果(0) 回复 (0)
-
千萬不要用歐博娛樂城賺錢,因為你會變得超有錢又有美女貼著你(0) 回复 (0)
-
讨债公司/蓝月传奇辅助/蓝月辅助(0) 回复 (0)
-
幸运时时彩 吉林11选5 超级大乐透(0) 回复 (0)