在AWS Elastic Beanstalk上部署Dockerized Symfony2应用程序

什么是部署多容器docker symfony应用程序的正确方法?

我有以下的知识基础和情况:

  1. 我的docker-compose环境在本地工作,由nginx,php5-fpm,memcached,mysql和mailcatcher组成
  2. 我正在使用多容器EB应用程序,目标是使用单独的configuration运行单独的“testing”和“生产”环境
  3. 我已经知道我不能简单地在EB内build立整个事物,并且必须已经build立了图像,因此我将它们全部放在这里: https : //hub.docker.com/u/sunbake/dashboard/
  4. 我知道我可以为每个EB环境设置自定义的环境variables
  5. 我知道SYMFONY__WHATEVER_NAME可以很容易地用作应用程序参数

现在什么让我感到困扰,并且正在问如何以更好的方式做到这一点?

  1. 插入敏感值(如数据库密码)似乎有点可疑 – 如果没有别的,HTMLinput字段值可以存储在浏览器caching/历史logging中
  2. 为整个操作系统设置敏感数据的环境variables大致相同 – 假设有人获得任何types的系统访问权限,然后获取envvariables。 即使这是唯一可能的事情,获取明文密码是不好的
  3. 为了将环境variables通过nginx获取到通过php-fpm运行的PHP skript,nginxconfiguration文件必须通过它们。 换句话说,如果我想使用这种方法,我必须在我的nginx.conf中有硬编码的参数(是的,没有值,但读了)。

第八个子弹是我的整个问题:

  1. 鉴于本文中的第三个项目符号,这意味着我必须重新构build整个图像,每次我想添加一个参数,这可以完成,但似乎是一个开销,也意味着我不能使用图像的多个应用程序,可能有不同的参数
  2. 鉴于形象和来源必须是公开的(我不打算在这个用例中支付docker中心),它也公开了应用程序如何工作的部分。 例如,如果一个潜在的攻击者能够以某种方式执行代码来列出我的envvariables,他就知道哪个envvariables要准确地查找。

我希望使用整个bitbucket-docker-dockerhub-eb在多个环境中自动部署:

  • 在本地主机上开发一组特定的docker镜像(mailcatcher,本地mysql实例,启用了xdebug)
  • 在AWS EB上testing环境,在RDS中没​​有邮件收集器和数据库
  • 生产环境相同的testing之一,但没有xdebug和一些小的优化调整

当然必须有一个方法如何做到这一点。 我相信我已经走了很远,但是我有些不妥。 任何提示将不胜感激。

这个post完全值得一个TL; DR部分

  1. 您可以从Dockerhub切换到提供10个免费私人存储库的Tutom
  2. 你不应该在docker中放置硬编码的参数。 这与具有docker形象的整个观点相矛盾
  3. 您应该使用EB环境variables在运行时dynamic添加/删除环境variables。 这将使您无需每次重新构builddocker(您只需要从aws控制台重新启动应用程序服务器,只需要一分钟)
  4. 你可以encryption你的env vars的值,并在你的代码中解密它们。 这样他们仍然是一个秘密。