使用docker搭建灵活的线上php环境 有时候你可能不太需要一些别人已经集成了的包或者镜像 我们就可以使用以下方式自己动手逐一构建自己所需要的环境结构 并在最后实现一键自动化部署 一步一步点亮docker技能树 ## . ## ## ## == ## ## ## ## ## === /""""""""""""""""".__/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ ._____ o __/ . . __/ .___.______/ * 首先 clone [server] 项目 放到服务器根目录(到后面你也可以构建自己风格的环境结构) (一阶) 使用 docker 逐一构建 1. 下载镜像 docker pull php:7.2-fpm 冒号后选择版本 docker pull nginx docker pull mysql:5.7 不需要本地数据库可忽略 docker pull redis:3.2 不需要本地 redis 可忽略 docker images 查看已下载的所有镜像 2. 下载完成镜像后运行容器 [以下采用 --link 方式创建容器 注意创建顺序] 注: <运行 mysql 容器> docker run --name mydb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 注:-MYSQL_ROOT_PASSWORD=123456 给mysql设置初始密码 如果不需要搭建本地数据库直接下一步 <运行 redis 容器> docker run --name myredis -p 6379:6379 -d redis:3.2 注: 如果不需要搭建本地redis直接下一步 <运行 php 容器> docker run -d -p 9000:9000 --name myphp -v /server/www:/var/www/html -v /server/php:/usr/local/etc/php --link mydb:mydb --link myredis:myredis --privileged=true php:7.2-fpm 注: 如果不需要搭建本地数据库或者redis可以省去--link mydb:mydb --link myredis:myredis 注意-v 挂载一个空文件夹是会覆盖容器中的内容,所以配置文件要事先准备好 <运行 nginx 容器> docker run --name mynginx -d -p 80:80 -v /server/www:/usr/share/nginx/html -v /server/nginx:/etc/nginx -v /server/logs/nginx.logs:/var/log/nginx --link myphp:myphp --privileged=true nginx 注: -v语句冒号后是容器内的路径 我将nginx的网页项目目录 配置目录 日志目录分别挂载到了我事先准备好的/server目录下 docker ps -a查看所有容器运行成功 这里环境也就基本搭建完成了 挂载目录后就可以不用进入容器中修改配置,直接在对应挂载目录下改配置文件 修改 nginx 配置 到 /server/nginx/conf.d/Default.conf server { listen 80: server_name localhost: location / { root /usr/share/nginx/html/blog/public: ##/user/share/nginx/html是工作目录 index index.html index.php index.htm } error-page 500 502 503 504 /50x.html localtion = /50x.html { root /usr/share/nginx/html } location ~\.php$ { fastcgi_pass myphp 9000: ## 容器与容器之间建立链接必须指定对方IP 使用命令sudo docker inspect myphp 可以看到最下面IPAddress参数就是该容器的ip ##我们在创建容器时已经通过--link的方式创建容器,我们可以使用被Link容器的笔名惊醒访问,而不是通过IP,解除了对IP的依赖 fastcgi_index index.php fastcgi-param SCRIPI_FILENAME /var/www/html/blog/public$fastcgi_script_name: ## myphp和mynginx的工作目录不同mynginx是/usr/share/nginx/html ## php是/var/www/html 所以在创建容器时我们已经将两个目录都挂在到宿主机相同的目录上了/server/www但这里不能使用宿主机的公共挂载目录 include fastcgi_params: } } 3.PHP 扩展库安装 docker exec -ti myphp /bin/bash 首先进入容器 docker-php-ext-install pdo pdo_mysql 安装 pdo_mysql 扩展 docker-php-ext-install redis 注: 此时报错提示redis.so 因为一些扩展并不包含在 PHP 源码文件中 方法一: tar zxvf /server/php_lib/redis-4.1.0.tgz 解压已经下载好的 redis 扩展包 docker cp /server/php_lib/redis-4.1.0 myphp:/usr/src/php/ext/redis 将扩展放到容器中 再执行安装 注: 直接将扩展包放到容器ext目录里可能会报错Error: No such container:path: myphp:/usr/src/php/ext 方法二: 注: 官方推荐使用 PECL(PHP 的扩展库仓库,通过 PEAR 打包)。用 pecl install 安装扩展,然后再用官方提供的 docker-php-ext-enable pecl install redis && docker-php-ext-enable redis docker restart myphp装完扩展 退出容器 重启容器 * 其它命令 docker stop $(docker ps -q) 停止所有容器 docker rm $(docker ps -aq) 删除所有容器 docker rmi $(docker images -q) 删除所有镜像 docker inspect myphp 查看容器配置信息 * 构筑自己的目录结构 你也可以构建自己所要的server目录结构 首先要知道挂载一个空文件夹会清空容器中文件夹下所有内容 所以应该先拷贝再挂载 (二阶) docker-compose 自动化构建 完成以上步骤你就已经初步了解了docker的基本容器操作 1. 安装 docker-compose curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version 2. 一键部署环境 /server/compose/docker-compose.yml已经配置好了 直接输入命令即可 cd /server/compose docker-compose up -d version:"2" sevices: mydb: container_name:"mydb" ports: - "3306:3306" volumes: #挂载的目录写在这里 - /server/mysql:/var/lib/mysql - /etc/localtime:/etc/localtime:re #设置容器和宿主机的时间同步 environment: # 自定义环境变量 MYSQL_ROOT_PASSWORD:123456 images:mysql: 8.0 # 容器引用镜像 myredis: container_name:"myredis" restart:always ports: - "6379:6379" volumes: - /server/redis:/data -/etc/localtime:etc/localtime:re image: redis:3.2 myphp: container_name:"myphp" restart: always ports: - "9000:9000" volumes: - /server/www:/var/www/html -/sever/php:/usr/local/etc/php -/etc/localtime:/etc/localtime:re links: - "mydb" - "myredis" image:php:7.2-fpm mynginx: container_name: "mynginx" restart: always ports: - "80:80" links: - "myphp" volnmes: - /server/www:/usr/share/nginx/html - /server/nginx:/etc/nginx - /server/logs/nginx.logsL/var/log/nginx - /etc/localtime:/etc/localtime:re image: nginx:latest 对比上面运行容器命令来看 docker_yml 的配置结构和语义就一目了然了 (三阶) dokcer-compose 和 dockerfile 完整构建 用了docker-compose实现一键式操作 但问题是PHP的扩展库还是得自己单独装 所以这里需要用到Dockerfile来构建自定义容器镜像 实现真正的一键完成 目录: server -| -| compose.dockerfiles -| docker-compose.yml -| mysql -| Dockerfile 这里设置我们自定的dockerfile来构建mysql镜像 | -| nginx -| Dockerfile 这里设置我们自定的dockerfile来构建nginx镜像 | -| php -| Dockerfile 这里设置我们自定的dockerfile来构建php镜像 | -| redis -| Dockerfile 这里设置我们自定的dockerfile来构建redis镜像 FROM php:7.2-fpm #构建自定义镜像过映入的官方镜像 MAINTAINER goozp "用户名" #设置容器时区和宿主机相同 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtome && echo $TZ > /etc/timezone #更新安装依赖包和PHP核心拓展 RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libhpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install - j$(nproc) gd \ && docker-php-ext-install zip \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install opcache && docker-php-ext-install mysqli rm -r /var/lib/apt/lists/* # 源码包不存在的扩展使用pecl装 RUN pecl install redis \ && pecl install xdebug \ && docker-php-ext-enable redis xdebug WORKDIR /data #权限设置 RUN usermod -u 1000 www-data 自定义php的dockerfile构建自定义镜像同时安装扩展 完成了所有dockerfile配置后 docker-compose.yml文件就不需要 cd /server/compose.dockerfiles docker-compose up -d 以上就是docker所有的环境配置方式 * 当你在宿主机上需要用 shell 调度 php 执行脚本 docker exec -it myphp /bin/bash -c '/usr/local/bin/php /var/www/html/blog/public/index.php' 以上所述是小编给大家介绍的docker如何实现灵活的构建PHP环境,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对17站长网的支持! |
免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!
始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!
扫一扫,关注站长网微信
当我们在共享网络访问的时候,可能会遇到提示指定的网络名不再可用的问题,这可能是由于我们的共享网络出现了错误,也可能是被共享的对象所拒绝了。指定的网络名 ......
1、首先进入到“百度”软件中, 2、然后在其中输入“百度识图”, 3、之后点击图中的“开始使用”按钮, 4、紧接着点击右下角的“相册”功能, 5、在相册下 ......
文/曹杨 原标题:谁还看电视? 爸爸戴一副老花镜,妈妈戴一副近视镜,一人坐在沙发,一人躺在床上,各自刷着自己关注的博主更新的短视频。电视也许开着,但只是背景。 这样的画面,几乎成了洛奇家的常 ...
一、软件冲突1、首先确认是否是应用程序冲突导致的。2、查看是否只有特定几个游戏或应用会导致该问题。3、如果是应用冲突,那么只要卸载这些app就可以解决了。二 ......
图片来源于简书 文/郭开森 杨帆 陆玖财经准备开新栏目了,每周一创始人郭开森和杨帆合体郭德帆,对行业进行一些观察和评论,第一篇我们仍是打算写社区团购,这是当下最火的话题。 来过陆玖财经做客的朋友们...
电脑端:1、大家可以点击右边链接进入网页版的百度网盘,进入之后点击“去登录”。https://pan.baidu.com/2、之后正确的输入账号密码进行登录就好啦。手机端:1 ......
一、N100对比intel i3 1、N100的跑分达到了147210分,这个数据可以达到i3的七代级别。 2、在跑分上也是超越了大部分的I3七代CPU,不过比I3八代要弱势一些。 3 ......
8月15日消息 上周,有媒体报道前身为百度图片的“榴莲”APP含有大量不雅视频内容被用户举报。对此,百度图片官方进行了回应,百度图片表示已经对报道中所涉及的“生吃旋风哥”等争议内容进行了下线处理。 此外,百度...
在填写一些项目申请书中,总是免不了要选择一些数字,但是在方框中如何插入数字,该怎么办呢?那么下面就由学习啦小编给大家分享下word在方框里输入数字的技巧, ......
WPS Office手机版怎么加横线?很多用户还不知道WPS Office手机版怎么加横线,WPS Office手机版怎么加横线,WPS Office手机版怎么打横线,WPS Office手机版怎么弄 ......
迅雷前缀是什么 答:迅雷前缀是(magnet:?xt=urn:btih:)括号里的就是了。 我们只要在这段文字之后输入后续的内容,就可以创建下载链接了。 1、磁力链接不基于文 ......
一、内容特权。 1、半价点播。 许多站内视频都需要付费观看,而大会员用户可以直接半价享受; 购买成功后的48h内无限次观看。有部分的内容是只限在中国大陆内观 ......
1、首先打开小米运动的“实验室功能”。 2、接着点击“门卡模拟”。 3、然后点击“我知道了”。 4、最后贴近就可以刷卡成功了。...
答:华为P系列: 华为p40,华为p40plus,华为p50,华为p50e,华为p60 华为mate系列: 华为mate40,华为mate50,华为mate50e,华为mate60 华为nova系列: 华为n ......
近期有用户反映,电脑在更新Windows 11 Insider Preview 25252.1000后,出现了应用和已压缩的文件点击毫无反应,拖拽都不行,只能从开始菜单打开的情况,这是怎 ......
可见单元格就是不包括隐藏或者筛选筛选后隐藏起来的单元格区域。方法:筛选或隐藏数据,复制需要粘贴的值,在目标单元格区域左上角的第一个单元格处右击,选择【 ......
答:骁龙8+更好。 骁龙7+gen2实际上就是骁龙8+的低配版本。 在一些其他的核心架构方面都是保持一致的,比如说CPU的架构、GPU的架构等等。 骁龙7+和骁龙8+具体 ......
文/黎明 一场针对中国互联网巨头的反垄断风暴正在酝酿,而且这次动真格了。 11月10日,国家市场监管总局发布《关于平台经济领域的反垄断指南(征求意见稿)》,要加大对互联网巨头涉嫌垄断的调查和监管。 ...
文件被win10系统误报病毒自动删除了如何进行恢复?有用户下载了某些破解软件却被Win10系统误认为是病毒文件而自动删除,当然系统自带杀毒软件其实挺不错的,就是有时候会误报,大家遇到这种情况的时候就希望把误删的...
win11系统如何释放掉系统默认保留的存储空间?一般情况下,Windows会保留一些存储空间,以便设备获得良好性能和成功更新。但是当出现系统盘储存空间不足时,我们会将几个G的保留空间释放出来,以解燃眉之急。本期教...
1、先打开机顶盒进入主界面,并且使用遥控器打开设置。 2、然后选择“账号与安全”,并且进入。 3、最后往下面翻就可以看到“ADB调试”的选项,直接开启就行了 ......
答:在3DMark压力测试当中,显卡需要超高97%才能够算合格,证明显卡的稳定性是过关的。 1、一般的默认情况下在2500~3000分就算很正常的了。 2、分数越高说明显卡 ......
罗技g304dpi灯颜色代表什么:1、蓝色:这种情况是正常工作的显示,如果说是常亮或者闪烁,那都没有问题这是在正常工作呢。2、红色:如果说是红灯闪烁的话那就是 ......
我们经常用WPS的时候,如果需要输入波浪号~,会发现键盘上的波浪号输入之后在最上面,但是为了美观,我们希望波浪号显示在中间。这里总结了三个方法分享给大家 ......
win11系统快速跳过联网创建本地管理账户3种方法?现在市面上销售的品牌笔记本和台式机基本上都预装Windows11家庭中文版正版操作系统,联网后系统会自动激活。当用户拿到新机器后还需要按照cortana(小娜)的提示一步...
答:中高端水平 i513500hx在处理器当中是处于一个中高端的水平。 i513500hx是第十一代酷睿处理器系列的一员,基础频率为2.4GHz,表现十分的不错。 i513500hx介 ......
打开软件,直接填写就可以。 1、下载安装easyconnect软件, 2、打开easyconnect应用,在如图所示的“服务器地址”一栏输入如图所示网址,点击“连接”, 3、等 ......
相信有非常多使用过笔记本的用户都听说过独显直连这个词,但很多用户并不了解独显直连是什么,又有什么用处,那么下面就和小编一起来看看什么是独显直连和开启这 ......
win11系统开机总是自动登录OneDrive如何关闭?win11系统开机的时候,会自动启动OneDrive,不想要启动,该怎么操作呢?下面我们就来看看详细的教程。 在OneDrive界面点小齿轮按钮,下拉菜单中点【设置】。 单击【...