如何将mongoDB Docker镜像部署到Elastic Beanstalk?

时间:2014-10-21 04:34:43

标签: mongodb amazon-web-services nginx docker elastic-beanstalk

我正在使用Docker和aws Elastic Beanstalk运行我的多服务架构。其中一项服务是mongoDB Docker镜像。它应该公开端口27017,以便其他服务可以连接到该端口中的mongo DB。不幸的是,Elastic Beanstalk内部nginx只暴露端口80,因此我的服务无法连接到端口27017上的mongo DB。

我在/.ebextensions文件夹中使用了一些配置文件时看到了一些答案(https://stackoverflow.com/a/24831425/1116959),但我不知道如何使用该解决方法。

我的架构还包括rabbitMQ服务和其他应用程序服务(python + celery)。有谁知道开始使用Amazon VPC是否更好?

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:2)

几个月后,通过使用Multicontainer Docker环境类型http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html,可以实现这一点。

这是我在生产中尚未使用的概念验证Dockerrun.aws.json:

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "mongo-app",
      "host": {
        "sourcePath": "/var/app/current/mongo-app"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "mongo-app",
      "image": "mongo",
      "essential": true,
      "memory": 6000,
      "command": ["mongod","--storageEngine=wiredTiger","--logpath=/var/log/mongodb/mongo.log"],
    "portMappings": [
        {
          "hostPort": 27017,
          "containerPort": 27017
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "mongo-app",
          "containerPath": "/data/db"
        },
        {
          "sourceVolume": "awseb-logs-mongo-app",
          "containerPath": "/var/log/mongodb"
        }
      ]
    }
  ]
}

此方法要求将环境类型设置为Multicontainer Docker,并将安全组附加到允许从数据库客户端访问端口27017的Elastic Beanstalk环境。

答案 1 :(得分:1)

Dockerrun.aws.json有一整个端口部分。您可以使用它而不是较低层的ebextensions配置文件。

{
  "AWSEBDockerrunVersion": "1",
  "Authentication": {
    "Bucket": "my-bucket",
    "Key": "mydockercfg"
  },
  "Image": {
    "Name": "janedoe/image",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "1234"
    }
  ],
  "Volumes": [
    {
      "HostDirectory": "/var/app/mydb",
      "ContainerDirectory": "/etc/mysql"
    }
  ],
  "Logging": "/var/log/nginx"
}