2016-04-21 48 views
1

我正在尝试使用全新安装的Phundament 4.3.0-beta6,Docker 1.11.0和Docker Compose 1.7.0来容纳Yii2 Web应用。主机是基于Ubuntu的Linux Mint 17.3。将Phundament web应用移至生产

一切工作都很好dev环境,但我没有找到正确构建生产映像的方法。

我已经使用过老版本的Phundament和Docker,运行在相同的问题中,所以我很肯定我没有面对一个bug:我只是误解了一些东西。

问题是,当地发展(docker-compose.override.yml,重写docker-compose.yml)泊坞窗,撰写文件容器安装根项目文件夹在两个PHPnginx的:

volumes: 
    - .:/app 

一些定制我后重新构建php容器,应用程序代码已成功添加到容器中(如Dockerfile中所述),因此我可以编辑docker-compose.override.yml文件,从php中删除volume指令容器,一切都OK。

但是,当我做同样与nginx的容器和运行docker-compose up -dnginx的给我回一个404这意味着它没有找到着陆页进PHP容器。它只是在我安装项目文件夹卷时发现它。

我想这不是预期的行为......我做错了什么?

回答

1

基本上,nginx只需要web文件夹的PHP图像index.phpassets/

所以,你可以使用volumesvolumes_from,像这样:

php: 
    volumes: 
    - /app/web 
nginx: 
    volumes_from: 
    - php 

另一种选择是对的方式配置nginx,它转发所有请求到PHP的容器,但是这不是真的需要静文件。

注意!当您重新部署应用程序时,您可能需要killrm -v您的PHP和nginx容器对卷进行更改。

随意创建一个问题,或者您有关于改进等想法...

全面披露:我Phundament的核心开发人员。

+0

谢谢您的回答,谢谢* * diemeisterei * * phd *的其余部分!好的,所以这个配置的重点是让'nginx'直接提供静态文件。我仍然不清楚的是,如果在制作过程中,我应该:1.将app/web文件夹上传到服务器,以便装入音量或2.重新编译“phundament/nginx”,并添加“COPY web”/app/web“,所以它可以从容器中使用。 – David

+0

不客气:)当你建立* phd *你['COPY'](https:// github。com/phundament/app/blob/b28dec88d9fae6f51bedaaa800f2cff9f7f8da86/Dockerfile#L18)'/ app/web'文件夹放到你的'php'图像上。通过声明一个'volume',你可以在其他容器中使用它(在相同的路径下)。由于'nginx'使用'volumes'from''php'静态文件在那里可用。所以不需要建立两个图像,你可以使用公共的'phundament/nginx-one'图像。 – schmunk

+0

完美!现在我懂了。我需要(如你所写)'卷: -/app'而不是'volumes:-.:/ app',所以它使用已经复制到'php'图像文件夹而不是我的本地文件夹。现在事情完美无缺。你提到的'-v'标志也很有用;我认为,直到现在,我没有有效地删除以前的卷,所以我得到了误导结果。再次感谢。 – David