在AWS beanstalk下将特定的EBS卷装载到Docker

时间:2014-08-04 20:17:00

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

AWS Beanstalk可以从Docker容器运行应用程序。 正如文档(http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html)中所提到的,可以将目录映射写入Dockerrun.aws.json中的EC2卷:

"Volumes": [
{
  "HostDirectory": "/var/app/mydb",
  "ContainerDirectory": "/etc/mysql"
}

但是,是否可以安装特定的EBS卷?

F.e。我需要在Docker容器中运行db并使用Beanstalk进行部署。很明显,我需要持久保存数据,备份/恢复数据库等。

2 个答案:

答案 0 :(得分:4)

您可以在任何Beanstalk环境中安装EBS卷。该卷将在EC2实例上提供。

您可以使用ebextensions选项设置执行此操作。使用以下内容在您的应用来源.ebextensions/01-ebs.config中创建一个文件:

option_settings:
   - namespace: aws:autoscaling:launchconfiguration
     option_name: BlockDeviceMappings
     value: /dev/sdj=:100,/dev/sdh=snap-51eef269,/dev/sdb=ephemeral0

映射的格式是device name = volume,其中设备映射被指定为单个字符串,其中映射由逗号分隔。此示例将自动扩展组中的所有实例附加到空的100 GB Amazon EBS卷,具有快照ID snap-51eef269的Amazon EBS卷和实例存储卷。

详细了解此选项设置here。 阅读有关ebextensions here的更多信息。

为beanstalk环境实例安装EBS卷后,可以使用上面的卷映射根据需要映射目录。

答案 1 :(得分:1)

我想leg100/docker-ebs-attach Docker容器能够满足您的需求,即提供特定的现有EBS卷。您可以复制.py文件和相关的Dockerfile语句,也可以创建多容器EB设置并从该容器安装卷。

BTW我曾尝试按照Rohit的建议安装一个新的EBS卷(+用于格式化和挂载它的命令),它可以工作但Docker does not see the mount until the docker daemon is restarted