加入收藏 | 设为首页 | 会员中心 | 我要投稿 泉州站长网 (https://www.0595zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

介于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/:
 
很容易吧! 现在我们可以快速的启动、更新环境了,但还是有很多地方需要改进。

(编辑:泉州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!