我正在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的预制图像在旋转时使用一个与另一个相比。
对此有何建议?或者还有其他方法可以解决缓慢的部署问题吗?
答案 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"
}
部署目录中没有其他内容。没有应用程序代码快速部署。我很高兴。