【问题标题】:Super-slow Elastic Beanstalk Docker Deployments超慢 Elastic Beanstalk Docker 部署
【发布时间】:2016-09-20 11:15:46
【问题描述】:

我正在 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 的预构建图像在旋转时使用一个与另一个。

对此有什么建议吗?还是有其他方法可以解决部署缓慢的问题?

【问题讨论】:

  • 几个问题:您是否使用已构建的 Docker 映像进行部署?为此使用什么注册表 - ECR 或其他什么?您运行了多少个服务实例?
  • 它尚未构建。不过,它使用的是从 dockerhub 上的私有仓库中提取的基础镜像。我发现一个 EB 实例运行缓慢。

标签: amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

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

请注意(因为这是一个 Rails 应用程序)我不仅要烘焙应用程序代码,还要烘焙类似的结果

bundle install

rake assets:precompile

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

部署到 Amazon 的内容
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"
}

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

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 2017-01-29
    • 2015-10-23
    • 2016-07-18
    • 2021-08-30
    • 2015-06-20
    • 2016-10-16
    • 2015-09-20
    • 2019-02-13
    相关资源
    最近更新 更多