如何将 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地 Docker 映像部署到 Azure 应用服务?

如何将 MarkLogic docker hub 映像部署到 Azure 容器实例 ACI

如何使用 Docker 映像将 Node.js HTTP/2 应用程序部署到 Google Compute Engine 上?

将 Docker 映像部署到 AWS 弹性 beantalk

使用 docker-compose 将 Docker 映像部署到谷歌云运行

如何将 PostgreSQL 卷附加到使用 SBT 本机打包程序生成的 Docker 映像?