介于Docker的PHP开发环境
发布时间:2022-06-01 11:31:15 所属栏目:云计算 来源:互联网
导读:现在很多开发者都使用Vagrant来管理他们的虚拟机开发环境,Vagrant确实很酷, 不过也有不少缺点(最主要的是它占用太多的资源)。在容器技术、Docker和更多类Docker技术出现后,解决这个问题就变得简单了。 免责声明 由于boot2docker的工作方式,本文所述的
|
构建并运行镜像 万事俱备只欠东风。我们还要构建Symfony Docker镜像, 使用docker build命令: 复制 $ cd docker-symfony $ docker build -t symfony . 现在,可以使用它来运行你的Symfony工程了: 复制 $ cd SomeProject $ docker run -i -t -P -v $PWD:/srv symfony 我们来看看这一连串的选项分别是干嘛的: -i 启动交互(interactive)模式, 也就是说,STDIO(标准输入输出)连接到了你当前的终端上。当你要接收日志或者给进程发送信号时,它很有用。 -t 为容器创建一个虚拟TTY, 它跟-i是好基友,通常一起使用。 -P 告诉Docker守护进程发布所有指定的端口, 本例中为80端口。 -v $PWD:/srv 把当前目录挂载到容器的/srv目录。挂载一个目录使得目录内容对目标挂载点可用。 现在你还记得之前提到的DB_NAME和INIT环境变量了吧,干嘛用的呢:用于自定义你的环境。 基本上你可以通过 docker run的-e选项在容器中设置环境变量,启动脚本会拿到环境变量,因此,如果你的DB名为some_project_dev, 你就可以这么运行容器: 复制 $ docker run -i -t -P -v $PWD:/srv -e DB_NAME=some_project_dev symfony 1. INIT 环境变量就更强大了,它允许你启动时运行指定的脚本。比如, 你有一个bin/setup脚本运行composer install命令并且设置数据库schema: 复制 #!/bin/bash composer install app/console doctrine:schema:update --force 用-e来运行它: 复制 $ docker run -i -t -P -v $PWD:/srv -e DB_NAME=some_project_dev -e INIT=bin/setup 注意,-e选项可以在docer run中多次使用,看起来相当酷。另外,你的启动脚本需要可执行权限(chmod +x)。 现在我们通过curl发送请求到容器,来检查一下是否所有的东西都像预期一样工作。首先,我们需要取到Docker映射到容器的80端口的公共端口,用docker port命令: 复制 $ docker port $(docker ps -aql 1) 80 0.0.0.0:49153 docker ps -aql 1 是个好用的命令,可以方便的检索到最后一个容器的id, 在我们的例子中,Docker 把容器的80端口映射到了49153端口。我们 curl 一下看看。 复制 $ curl http://localhost:49153 You are not allowed to access this file. Check app_dev.php for more information. 当我们不从localhost(译者注:容器的localhost)访问dev controller时,得到了Symfony的默认错误消息,这再正常不过了, 因为我们不是从容器内部发送 curl 请求的, 所以,可以安全的从前端控制器web/app_dev.php中移除这些行。 复制 // This check prevents access to debug front controllers that are deployed by accident to production servers. // Feel free to remove this, extend it, or make something more sophisticated. if (isset($_SERVER['HTTP_CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']) || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server') ) { header('HTTP/1.0 403 Forbidden'); exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 这些行阻止了任何从localhost以外的地方访问dev controller。 现在再curl的时候就可以正常工作了,或者用浏览器访问 http://localhost:49153/: 很容易吧! 现在我们可以快速的启动、更新环境了,但还是有很多地方需要改进。 (编辑:泉州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐

