在AWS ELB上运行Docker容器,连接到主机节点应用程序

时间:2017-09-22 18:17:28

标签: node.js amazon-web-services docker elastic-beanstalk

我要做的是双重的:一,在我的Elastic Beanstalk环境中运行Docker容器(最好是从Dockerfile创建,而不是从图像中提取),该环境已经在生产中运行Node应用程序。然后,将两者连接在一起,以便可以通过主机上的localhost访问我的服务器(在Docker容器上运行)。这样做的最终目标是允许两者通过TCP进行通信,但我认为这样做没有Dockeriziation。

从我看到的情况来看,AWS可以选择单容器Docker应用程序;然而,我不清楚它是用于仅在Docker上运行的应用程序,还是像我这样的场景。从我所读到的,我倾向于前者。

因此,我唯一的选择是在我的实例上手动安装Docker作为包,将其作为服务运行,然后从Dockerfile构建和运行吗?这似乎相当迂回,我相信我之前尝试过的只取得了有限的成功 - 但如果这是最好的道路,那就是我会尝试的!

感谢你们给我的任何帮助。将接受第一个给出可行解决方案的答案。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您需要在Docker容器中打包现有的Node应用程序,然后使用ELB Multi Container Docker environment在容器中运行这两个应用程序。

您需要将两个容器存储在私有或公共注册表中。要利用AWS Registry服务,请遵循this文章中的说明。然后,在您的EB环境的Dockerrun.aws.json文件中引用您的容器。

为了让容器能够相互通信,请包含"链接"到Dockerrun.aws.json文件中的其他容器:

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "my-node-app",
      "image": "registry:my-node-app",
      "essential": true,
    {
      "name": "other-container",
      "image": "registry:other-container",
      "essential": true,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "links": [
        "my-node-app"
      ]
    }
  ]
}

在这种情况下,Docker通过主机名" my-node-app"将您的节点容器暴露给您的其他容器。 (这是一个缩写的Dockerrun文件,只是fyi)