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

mac上利用docker搭建lnmp开发环境

时间:2023-03-29 21:03:34 PHP

在mac上使用docker搭建lnmp开发环境后,大概是这样的。可以在终端测试$docker-v$docker-compose-v来修改docker镜像仓库。首先去阿里云获取专属加速地址,打开docker->preferences->Daemon->Registrymirrors点击加号,粘贴刚刚获取的加速地址,点击Apply&Restart。使用git快速获取lnmp进入当前用户的mac终端,然后执行$gitclonehttps://github.com/shmilylbelva/dnmp.git$cddnmp$docker-composeup开始安装资源,如图如下图,完成后可以在浏览器访问localhost,出现如下界面代表ok。.站点部署本文默认添加两个站点:www.site1.com(同localhost)和www.site2.com。要在本地访问这两个域名,需要修改你的hosts文件,添加如下两行:127.0.0.1www.site1.com127.0.0.1www.site2.com其中www.site2.com支持SSL/https和HTTP/2示例站点。由于站点2的SSL采用自签名方式,浏览器有安全提示,继续访问即可,将自己站点换成第三方SSL证书即可。如果只使用站点1,删除站点2的相关目录和配置文件:./conf/nginx/conf.d/certs/site2/./conf/nginx/conf.d/site2.conf./www/site2/重启容器中的Nginx生效:dockerexec-itdlnmp_nginxnginx-sreloaddnmp目录结构。├──conf配置目录│├──conf.d站点配置文件目录││├──certsSSL认证文件、密钥和加密文件目录│││└──站点2的site2认证文件目录││├──site1.confsite1Nginx配置文件││└──site2.confsite2Nginx配置文件│├──my.cnfMySQL配置文件│├──nginx.confNginx通用配置文件│├──php-fpm.confdPHP-FPM配置目录││└──www.confPHP-FPM配置文件│├──php.iniPHP配置文件├──docker-compose.yml默认容器启动配置文件├──docker-compose54.ymlphp5.4容器启动配置文件├──docker-compose56.ymlphp5.6容器启动配置文件├──log日志目录│├──mysql.slow.logMySQL日志│├──nginx.error.logNginx日志│├──nginx.site1.error.log│├──nginx.site2.error.log├──mysqlMySQL数据文件目录├──phpPHP版本目录└──www站点根目录├──site1站点1根目录└──site2站点2根目录MYSQL说明在docker-compose.yml文件中,我们指定MySQL数据库root用户的密码是123456,所以我们可以在host中传入:$mysql-h127.0.0.1-uroot-p#linux#在mac中需要先切换到mysql容器$dockercontainerls#列出容器列表$dockerexec-it775c7c9ee1e1/bin/bash#容器id不需要输入完整的mysql容器id,一般3位即可区分。$mysql-h127.0.0.1-uroot-p输入密码进入MySQL命令行。说明:这里MySQL的连接主机不能使用localhost,因为MySQL客户端默认使用unixsocket连接,应该直接使用本地IP。在PHP代码中的用法与在宿主机中略有不同,如下:$pdo=newPDO('mysql:host=mysql;dbname=site1','root','123456');其中,host的值是docker-compose.yml中指定的MySQL容器的名称。这是因为PHP代码在FPM容器中。FPM容器启动时会自动在/etc/hosts中添加:172.17.0.2mysql11e55f91c4c3dnmp_mysql即mysql自动指向MySQL容器动态生成的IP。注意这里使用php的mysql连接测试会失败(有提示mbind:Operationnotpermittedwhendocker-composeisup),所以需要处理以上问题。进入刚才的mysql终端,内容大致如下。hostis%表示unlimitediplocalhost表示本机使用的插件不是mysql_native_password,需要修改密码mysql>selecthost,user,plugin,authentication_stringfrommysql.user;+------------+-----------------+--------------------+----------------------------------------------------------------------+|主持人|用户|插件|身份验证字符串|+------------+-------------------+---------------------+----------------------------------------------------------------------+|%|根|缓存_sha2_密码|$A$005$^]RQB}j~t!.#v)3.UogPRFu8VJA5/GKEbK5edEQlMT5sHw2n72zYJNlIbo3||本地主机|mysql.信息模式|mysql_native_password|*此密码无效,可在此处使用||本地主机|mysql.会话|mysql_native_password|*此密码无效,可在此处使用||本地主机|mysql.sys|mysql_native_password|*此密码无效,可在此处使用||本地主机|根|--+----------------+------------------------+--------------------------------------------------------------------+依次执行以下操作ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'newpassword';#更新用户的密码root用户密码是newpasswordmysql>ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'123456';QueryOK,0rowsaffected(0.06sec)Mysql连接问题解决修改docker-compose.yml如果容器已经生成,编辑docker-compose.yml,使用docker-composeup命令会直接启动原来的容器,并且修改的内容不会反映在启动的容器中。因此,要使修改后的docker-compose.yml生效,需要以下4个步骤:$dockerstopdnmp_nginx#Step1:stopthecontainer$dockerrmdnmp_nginx#Step2:Deletecontainer#!!第三步:重启Docker服务!!$docker-composeup-d--no-deps--buildmysql#第四步:重启容器最后一个命令参数的作用:/-d:后台执行--no-deps:不启动链接容器--build:在启动容器之前构建镜像。使用RedisRedis类似于MySQL。不过需要注意的是,在./php/php72#源码安装方法#php7中的Dockerfile末尾可以安装ENVPHPREDIS_VERSION4.0.0RUNcurl-L-o/tmp/redis.tar.gzhttps://github。com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz\&&tarxfz/tmp/redis.tar.gz\&&rm-r/tmp/redis.tar.gz\&&mkdir-p/usr/src/php/ext\&&mvphpredis-$PHPREDIS_VERSION/usr/src/php/ext/redis\&&docker-php-ext-installredis\&&rm-rf/usr/src/php如果是php5.X那么应该这样像这样(需要自己添加到对应的Dockerfile中,然后docker-composeup)#PECL安装方法#php5可以安装#添加扩展redispecl方法RUNapkadd--no-cache--updatelibmemcached-libszlibRUNset-xe\&&apk添加--no-cache--update--virtual.phpize-deps$PHPIZE_DEPS\&&peclinstall-o-fredis\&&echo"extension=redis.so">/usr/local/etc/php/conf.d/redis.ini&&rm-rf/usr/share/php\&&rm-rf/tmp/*\&&apkdel.phpize-deps通过地址127.0都在主机和容器内部.0.1,6379端口访问PHP是跨容器访问,host参数使用redis(链接指定的名称),端口使用6379。修改site2的index.php文件如下connect('192.168.1.11',6379);//换成自己的ip$redis->set('name','Qingbo');echo$redis->get('名字');//检查是否连接成功。浏览器访问www.site2.com,出现'青波'说明redis扩展正常。