超慢Elastic Beanstalk Docker部署

时间:2016-05-23 14:07:50

标签: amazon-web-services elastic-beanstalk

我正在Elastic Beanstalk上部署Docker应用。它可以工作,但需要永远(30分钟,直到它回到“绿色”状态)。在我的开发环境中,它会在几秒钟内完成。通过SSH连接到生产实例并拖尾日志(/var/log/eb-activity.log),我看到它挂在下面的星号行上(运行03build.sh):

[2016-05-23T13:10:00.430Z] INFO  [3199]  - [Application deployment app-160523_130556@23/StartupStage0/AppDeployPreHook/02loopback-check.sh] : Starting activity...
[2016-05-23T13:10:07.845Z] INFO  [3199]  - [Application deployment app-160523_130556@23/StartupStage0/AppDeployPreHook/02loopback-check.sh] : Completed activity.
*****[2016-05-23T13:10:07.845Z] INFO  [3199]  - [Application deployment app-160523_130556@23/StartupStage0/AppDeployPreHook/03build.sh] : Starting activity... 
[2016-05-23T13:31:58.805Z] INFO  [3199]  - [Application deployment app-160523_130556@23/StartupStage0/AppDeployPreHook/03build.sh] : Completed activity. Result:
  latest: Pulling from srfoster/my-repo
  6714a7dc486b: Pulling fs layer
  5866500c2af9: Pulling fs layer
  ... ETC ...

根据这个类似问题的一个(未接受的)答案...

Why are Docker build commands running so slow in Elastic Beanstalk?

我跑了

docker info | grep Storage

然后回来了

devicemapper

据说,aufs比devicemapper更快(根据上面链接的问题)。

Buuuut,即使这是真的,我也不知道如何让Beanstalk的预制图像在旋转时使用一个与另一个相比。

对此有何建议?或者还有其他方法可以解决缓慢的部署问题吗?

1 个答案:

答案 0 :(得分:4)

好的,我尝试使用完全构建的docker镜像进行部署,以最大限度地减少部署期间必须在实例上完成的操作。我可以确认这会将部署时间缩短到大约3分钟。

请注意(因为这是一个Rails应用程序)我不仅需要烘焙应用程序代码,还需要烘焙像

这样的结果
bundle install

rake assets:precompile

我将所有这些放入图像中并将完全烘焙的图像部署到(在我的情况下)Dockerhub。我用

部署到亚马逊的内容
eb deploy

基本上只是这个Dockerfile:

FROM srfoster/my-fully-built-docker-image:latest
EXPOSE 80
ENTRYPOINT /path/to/foreman start -f AWSProcfile

和准系统Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1",
  "Authentication": {
      "Bucket": "my-credentials-bucket",
      "Key": "path/to/my/dockercfg"
  },
  "Ports": [
    {
      "ContainerPort": "80"
    }
  ],
  "Logging": "/var/log/nginx"
}

部署目录中没有其他内容。没有应用程序代码快速部署。我很高兴。