1 / 6
文档名称:

用docker搭建php环境,搭建基于Docker的PHP开发环境的详细教程.pdf

格式:pdf   大小:580KB   页数:6页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

用docker搭建php环境,搭建基于Docker的PHP开发环境的详细教程.pdf

上传人:小屁孩 2024/3/13 文件大小:580 KB

下载得到文件列表

用docker搭建php环境,搭建基于Docker的PHP开发环境的详细教程.pdf

相关文档

文档介绍

文档介绍:该【用docker搭建php环境,搭建基于Docker的PHP开发环境的详细教程 】是由【小屁孩】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【用docker搭建php环境,搭建基于Docker的PHP开发环境的详细教程 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。其身正,不令而行;其身不正,虽令不从。——《论语》?docker搭建php环境,搭建基于Docker的PHP开发环境的详细教程现在很多开发者都使?Vagrant来管理他们的虚拟机开发环境,Vagrant确实很酷,不过也有不少缺点(最主要的是它占?太多的资源)。在容器技术、Docker和更多类Docker技术出现后,解决这个问题就变得简单了。免责声明由于boot2docker的?作?式,本?所述的?法在你的环境中可能?法正常运?。如果需要在?Linux环境下共享?件夹到Docker容器,还需要注意更多额外的细节。后续我会写篇?章专门来介绍实际遇到的问题。怎样才算是好的开发环境?先,我们得知道什么才是好的开发环境,对于我??,?个好的开发环境需要具备以下?个特点:可随意使?。我必须可以随意删除和创建新的环境。快速启动。我想要?它?作时候,它?马就能?。易于更新。在我们?业中,事物发展变化?常快,必须能让我很容易将我的开发环境更新到新的软件版本。?Docker都?持以上这些特点,甚?更多。你?乎可以即时销毁和重建容器,?更新环境只需要重建你当前使?的镜像即可。什么是PHP开发环境?前Web应?错综复杂,PHP开发环境需要很多的东西,为了保证环境的简单性,需要做各种各样的限制。我们这次使?Nginx、PHP5-FPM、MySQL来运?Synmfony项?。Pet与Cattle另?个我们要讨论的重点是:我们要把开发环境部署在多容器还是单容器中。两种?式各有优点:单容器易于分发、维护。因为它们是独?的,所有的东西都运?在同?个容器中,这点就像是?个虚拟机。但这也意味着,当你要升级其中的某样东西(?如PHP新版本)的时候,需要重新构建整个容器。多容器可以在添加组件时提供更好的模块化。因为每个容器包含了堆栈的?部分:Web、PHP、MySQL等,这样可以单独扩展每个服务或者添加服务,并且不需要重建所有的东西。因为我?较懒,加上我需要在我的笔记本上放点别的内容,所以,这?我们只介绍单个容器的?法。初始化?程?先要做的是初始化?个新的Symfony??poser的create-project命令。本来可以在?poser,但是那样太简单了。这次我们通过Docker来使?它。我之前发过?篇关于Docker命令的?章:mands(好吧,我说谎了,我本来把它写在这篇?章中了,然后觉得把它独?出来会?较好)。不管怎么样,你可以读?下。poser命令的话,你可以创建?个属于??的composer别名。$poser="dockerrun-i-t-v\$PWD:/poser"现在你可以初始化Symfony?程了:$composercreate-projectsymfony/framwork-standard-editionSomeProject帅呆了!下?来点实在的?作。容器构建?个运?标准Symfony项?且?给??的容器相当容易,只需要安装好常?的Nginx、PHP5-FPM和MySQL-Server即可,然后把预先准备好的Nginx的虚拟主机配置?件扔进去,再复制?些配置?件进去就完事了。志不强者智不达,言不信者行不果。——墨翟志不强者智不达,言不信者行不果。——墨翟本容器的源代码在GitHub上的ubermuda/docker-symfony仓库中可以找到。Dockerfile是Docker构建镜像要?到的配置?件,我们来看?下:FROMdebian:wheezyENVDEBIAN_FRONTENDnoninteractiveRUNapt-getupdate-yRUNapt-getinstall-ynginxphp5-fpmphp5-mysqlndphp5-climysql-serversupervisorRUNsed-e's/;daemonize=yes/daemonize=no/'-i/etc/php5/fpm/php--e's/;listen\.owner//'-i/etc/php5/fpm/-e's/;listen\.group//'-i/etc/php5/fpm/"\ndaemonoff;">>/etc/nginx/-available//["/srv"]WORKDIR/srvCMD["/usr/bin/supervisord"]我们通过扩展debian:wheezy这个基础镜像开始,然后通过?系列的sed命令来配置Nginx和PHP5-FPM。RUNsed-e's/;daemonize=yes/daemonize=no/'-i/etc/php5/fpm/php--e's/;listen\.owner//'-i/etc/php5/fpm/-e's/;listen\.group//'-i/etc/php5/fpm/"\ndaemonoff;">>/etc/nginx/?我们要做两件事。?先配置PHP5-FPM和Nginx让他们在前台运?以便supervisord可以追踪到他们。然后,配置PHP5-FPM以指定的?户运?Web-Server,并处理好?件权限。接下来需要安装?组配置?件,?先是Nginx的虚拟主机配置?:server{listen80;server_name_;access_log/var/log/nginx/;error_log/var/log/nginx/;root/srv/web;;location/{try_files$uri$uri//?$query_string;海纳百川,有容乃大;壁立千仞,无欲则刚。——林则徐其身正,不令而行;其身不正,虽令不从。——《论语》}location~[^/]\.php(/|$){fastcgi_passunix:/var/run/php5-;includefastcgi_params;}}因为我们不需要域名,所以把server_name设成了_(有点像perl的$_占位符变量),并配置根?录(documentroot)为/svr/web,我们会把应?程序部署在/srv下,剩下的就是标准的Mginx+PHP5-?个容器每次只能运??个程序,我们需要supervisord(或者任何别的进程管理器,不过我?较中意supervisord)。幸运的是,这个进程管理器会产?我们需要的所有进程!下?是??段supervisord的配置:[supervisord]nodaemon=true[program:nginx]command=/usr/sbin/nginx[program:php5-fpm]command=/usr/sbin/php5-fpm[program:mysql]command=/usr/bin/mysqld_safe[program:init]command=/=falseredirect_stderr=trueredirect_stdout=/srv/app/logs/?我们需要做的是定义所有的服务,加上?个特殊的program:init进程,它不是?个实际的服务,?是?个独创的运?启动脚本的?式。这个启动脚本的问题在于,它通常需要先启动某些服务。?如,你可能要初始化?些数据库表,但前提是你得先把MySQL跑起来,?个可能的解决办法是,在启动脚本中启动MySQL,然后初始化表,然后为了防?影响到supervisord的进程管理,需要停掉MySQL,最后再启动supervisord。这样的脚本看起来类似下?这样:/etc/:schema:update--force/etc/?有,咱换种?式,让supervisor来运?它并且永不重启。:#!/bin/bash忍一句,息一怒,饶一着,退一步。——《增广贤文》海纳百川,有容乃大;壁立千仞,无欲则刚。——林则徐RET=1while[[RET-ne0]];dosleep1;mysql-e'exit'>/dev/null2>&1;RET=$?doneDB_NAME=${DB_NAME:-symfony}mysqladmin-urootcreate$DB_NAMEif[-n"$INIT"];then/srv/$INITfi脚本先等待MySQL启动,然后根据环境变量DB_NAME创建DB,默认为symfony,然后在INIT环境变量中查找要运?的脚本,并尝试运?它。本?的结尾有说明如何使?这些环境变量。构建并运?镜像万事俱备只?东风。我们还要构建SymfonyDocker镜像,使?dockerbuild命令:$cddocker-symfony$dockerbuild-,可以使?它来运?你的Symfony?程了:$cdSomeProject$dockerrun-i-t-P-v$PWD:/srvsymfony我们来看看这?连串的选项分别是?嘛的:-i启动交互(interactive)模式,也就是说,STDIO(标准输?输出)连接到了你当前的终端上。当你要接收?志或者给进程发送信号时,它很有?。-t为容器创建?个虚拟TTY,它跟-i是好基友,通常?起使?。-P告诉Docker守护进程发布所有指定的端?,本例中为80端?。-v$PWD:/srv把当前?录挂载到容器的/srv?录。挂载?个?录使得?录内容对?标挂载点可?。现在你还记得之前提到的DB_NAME和INIT环境变量了吧,?嘛?的呢:?于?定义你的环境。基本上你可以通过dockerrun的-e选项在容器中设置环境变量,启动脚本会拿到环境变量,因此,如果你的DB名为some_project_dev,你就可以这么运?容器:$dockerrun-i-t-P-v$PWD:/srv-eDB_NAME=some_project_devsymfonyINIT环境变量就更强?了,它允许你启动时运?指定的脚本。?如,你有?个bin/poserinstall命令并且设置数据库schema:#!/bin/bashcomposerinstallapp/consoledoctrine:schema:update--force?-e来运?它:$dockerrun-i-t-P勿以恶小而为之,勿以善小而不为。——刘备先天下之忧而忧,后天下之乐而乐。——范仲淹-v$PWD:/srv-eDB_NAME=some_project_dev-eINIT=bin/setup注意,-e选项可以在docerrun中多次使?,看起来相当酷。另外,你的启动脚本需要可执?权限(chmod+x)。现在我们通过curl发送请求到容器,来检查?下是否所有的东西都像预期?样?作。?先,我们需要取到Docker映射到容器的80端?的公共端?,?dockerport命令:$dockerport$(dockerps-aql1):49153dockerps-aql1是个好?的命令,可以?便的检索到最后?个容器的id,在我们的例?中,Docker把容器的80端?映射到了49153端?。我们curl?下看看。(译者注:容器的localhost)访问devcontroller时,得到了Symfony的默认错误消息,这再正常不过了,因为我们不是从容器内部发送curl请求的,所以,可以安全的从前端控制器web/?。//identtoproductionservers.//Feelfreetoremovethis,extendit,(isset($_SERVER['HTTP_CLIENT_IP'])||isset($_SERVER['HTTP_X_FORWARDED_FOR'])||!(in_array(@$_SERVER['REMOTE_ADDR'],array('','fe80::1','::1'))||php_sapi_name()==='cli-server')){header('HTTP/');exit(''.basename(__FILE__).'formoreinformation.');}这些?阻?了任何从localhost以外的地?访问devcontroller。古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼其身正,不令而行;其身不正,虽令不从。——《论语》谋事在人,成事在天!——《增广贤文》