当前位置:  开发笔记 > 后端 > 正文

AWS:Docker Compose项目的CodeDeploy?

如何解决《AWS:DockerCompose项目的CodeDeploy?》经验,为你挑选了1个好方法。

我目前的目标是让Travis在我们的Git master分支成功合并拉取请求后部署我们的Django + Docker-Compose项目.我已经完成了一些设置我们的AWS CodeDeploy的工作,因为Travis已经内置了对它的支持.当我到达AppSpec和实际部署部分时,首先我尝试使用AfterInstall脚本docker-compose build,然后使用ApplicationStart脚本docker-compose up.从Web中提取图像的容器是我们的PostgreSQL容器(命名为dbimage aidanlister/postgres-hstore,这是通常的postgres图像加上hstore扩展名),Redis容器(使用redis图像)和Selenium容器(图像selenium/standalone-firefox).其他两个容器,web以及worker,分别Django的服务器和芹菜工作者,使用相同的Dockerfile构建的图像.主要命令是:

CMD paver docker_run

它使用一个pavement.py文件:

from paver.easy import task
from paver.easy import sh

@task
def docker_run():
    migrate()
    collectStatic()
    updateRequirements()
    startServer()

@task
def migrate():
    sh('./manage.py makemigrations --noinput')
    sh('./manage.py migrate --noinput')

@task
def collectStatic():
    sh('./manage.py collectstatic --noinput')

# find any updates to existing packages, install any new packages
@task
def updateRequirements():
    sh('pip install --upgrade -r requirements.txt')

@task
def startServer():
    sh('./manage.py runserver 0.0.0.0:8000')

以下是我(我想)每次合并拉取请求时需要做的事情:

    让Travis使用CodeDeploy部署更改,基于为CodeDeploy设置量身定制的deploy部分.travis.yml

    使用我们的成功部署后,在AWS上启动我们的Docker容器 docker-compose.yml

如何实现第二步?我很确定ECS实际上并不是这里所需要的.我目前的状态是我可以让Docker开始使用sudo service docker start但是我无法获得docker-compose up成功.虽然部署报告为"成功",但这只是因为该docker-compose up命令在Validate Service部分脚本的后台运行.事实上,当我尝试docker-compose up在ssh进入EC2实例时手动执行时,我CMD paver docker_run在Dockerfile 的一部分之前就陷入了构建其中一个容器的困境.



1> Dan K..:

这需要很长时间才能完成,但我终于找到了一种方法,可以在没有Docker-Machine或ECS的情况下使用CodeDeploy部署Django + Docker-Compose项目.

有一件重要的事情就是制作一个docker-compose.yml排除selenium容器的替代品- 它所做的只是导致问题而且只对本地测试有用.此外,选择可以处理构建容器的实例类型非常重要.无法从我们的Dockerfile构建容器的原因是该实例根本没有内存来完成构建.而不是t1.micro实例,m3.medium是有效的.拥有足够的磁盘空间也很重要--8GB太小了.为了安全起见,256GB是理想的选择.

service docker start在进行必要的Docker安装和设置(包括安装Docker-Compose)时运行After Install脚本非常重要.这是显式开始运行Docker守护程序 - 如果没有此命令,您将收到错误Could not connect to Docker daemon.安装Docker-Compose时,重要的是将其放入,/opt/bin/以便通过使用二进制文件/opt/bin/docker-compose.放入它有问题/usr/local/bin(我不完全记得有什么问题,但它与Amazon Linux AMI的特定Linux发行版有关).After Install脚本需要以root身份运行(runas: rootappspec.ymlAfterInstall部分中).

此外,部署的最后阶段docker-compose up(更具体地说是启动容器/opt/bin/docker-compose -f docker-compose-aws.yml up)需要在后台运行,stdin和stdout重定向到/dev/null:

/opt/bin/docker-compose -f docker-compose-aws.yml up -d > /dev/null 2> /dev/null < /dev/null &

否则,一旦服务器启动,部署将挂起,因为最终的脚本命令(appspec.yml在我的案例的ApplicationStart部分中)不会退出.在默认部署超时1小时后,这可能会导致部署失败.

如果一切顺利,那么最终可以在浏览器中的实例的公共DNS和端口访问该站点.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有