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

Posted

技术标签:

【中文标题】如何将 mongoDB Docker 映像部署到 Elastic Beanstalk?【英文标题】:How to deploy mongoDB Docker image to Elastic Beanstalk? 【发布时间】:2014-12-16 05:18:34 【问题描述】:

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

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

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

感谢任何帮助,谢谢

【问题讨论】:

你有想过这个吗? 【参考方案1】:

现在几个月后,这可以通过使用多容器 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"
        
      ]
    
  ]

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

【讨论】:

【参考方案2】:

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"

【讨论】:

根据我的经验,它通过 Nginx 反向代理将端口 1234 发布为端口 80。由于 nginx 默认仅支持 http,因此 Mongodb 有线协议不起作用,因为它需要 TCP。

以上是关于如何将 mongoDB Docker 映像部署到 Elastic Beanstalk?的主要内容,如果未能解决你的问题,请参考以下文章