当前位置: 首页 > 后端技术 > PHP

docker搭建php+nginx+swoole+mysql+redis环境

时间:2023-03-29 15:04:19 PHP

操作系统:阿里云esc实例centos7.4软件:docker-ce18.09.3版本,docker-compose1.23.2版本1.创建一个扩展名为swoole-redis-pdo_mysql-gd的dockerimage1。创建一个dockerfilevimdockerfile2。从php:7.1-fpmRUN写入apt-getupdate&&apt-getinstall-y\libfreetype6-dev\libjpeg62-turbo-dev\libpng-dev\&&docker-php-ext-install-j$(nproc)iconv\&&docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/\&&docker-php-ext-install-j$(nproc)gd\&&docker-php-ext-configurepdo_mysql\&&docker-php-ext-installpdo_mysql\&&peclinstallredis-4.3.0\&&peclinstallswoole\&&docker-php-ext-enableredisswoole3.创建自定义php镜像,最主要的是不要漏掉最后一个'.',也就是指定当前构建镜像的目录dockerbuild-tmyphp4。运行命令,由于网络问题等,需要等待较长时间。成功后会出现类似如下代码Thecodefor...BuildprocesscompletedsuccessfullyInstalling'/usr/local/include/php/ext/swoole/config.h'Installing'/usr/local/lib/php/extensions/没有调试没有n-zts-20160303/swoole.so'安装成功:channel://pecl.php.net/swoole-4.3.1configurationoption"php_ini"isnotsettophp.inilocationYoushouldadd"extension=swoole.so"tophp.iniRemovingintermediatecontainerad1420f7554f--->2f2f332d73ceSuccessfullybuilt2f2f332d73ceSuccessfullytaggedmyphp4:latest至此docker自定义myphp4镜像创建成功!2.创建docker-compose.yml文件mkdirpnsmrcdpnsmrvimdocker-compose.yml写入如下代码version:'3.0'services:nginx:image:"nginx:latest"ports:-"9998:80"volumes:-/var/www/html:/usr/share/nginx/htmlphp-fpm:image:"myphp4"volumes:-/var/www/html:/usr/share/nginx/htmlmysql:image:"mysql:latest"环境:-MYSQL_ROOT_PASSWORD=123456-MYSQL_DATABASE=testredis:image:"redis:4.0"运行命令docker-composeup-d成功,你可以看到WARNING:TheDockerEngineyou'reusingisrunninginswarmmode。Compose不使用swarm模式将服务部署到swarm中的多个节点。所有容器将被调度在当前节点上运行。要跨群部署您的应用程序,请使用“dockerstackdeploy”。使用默认驱动程序创建网络“pnsmr_default”。done至此,nginxmysqlredisphp服务已经开启。三、修改各个服务的配置文件1、在浏览器中输入127.0.0.1:9998#这里要输入你的服务器ip地址,可以看到下图2、接下来需要修改对于nginx的配置文件容器,首先使用命令查看每个容器的dockerIP地址dockerinspect-f'{{.Name}}-{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'$(dockerps-aq)这个命令可以查看所有用docker-compose打开的容器的ip。结果类似下图,可以使用对应的ip地址进行内部通信。3.复制nginx容器的配置文件,修改替换。启用nginx解析phpdockercppnsmr_nginx_1:/etc/nginx/conf.d/default.confnginx.confvimnginx.conf修改为如下代码server{listen80;服务器名称本地主机;#charsetkoi8-r;#access_log/var/log/nginx/host.access.logmain;位置/{root/usr/share/nginx/html;indexindex.htmlindex.htm;}#error_page404/404.html;#将服务器错误页面重定向到静态页面/50x.html#error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}#将PHP脚本代理到侦听127.0.0.1:80的Apache##location~\.php${#proxy_passhttp://127.0.0.1;#}#将PHP脚本传递给侦听127.0.0.1:9000的FastCGI服务器#location~\.php${roothtml;fastcgi_pass172.24.0.3:9000;#这里需要填写你的php容器的docker内部通信ipfastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME/usr/share/nginx/html/$fastcgi_script_name;包括fastcgi_params;}#拒绝访问.htaccess文件,如果Apache的文档根#与nginx的根一致##location~/\.ht{#denyall;#}}修改成功后,执行如下命令dockercpnginx.confpnsmr_nginx_1:/etc/nginx/conf.d/default.conf#将修改后的配置文件复制到容器中dockercontainerstoppnsmr_nginx_1ddockercontainerstartpnsmr_nginx_1#重启nginx容器使配置文件生效vim/var/www/html/index.php#在服务器本地目录新建index.php文件,输入connect("172.24.0.4",6379);$redis->set('test','这是对redis的测试');echo$redis->get('测试');访问127.0.0.1:9998/redis.php,redis已经生效,进入mysql容器dockerexec-itpnsmr_mysql_1bash进入mysql,修改root用户密码创建测试文件vim/var/www/html/mysql.php