【问题标题】:Can anyone tell me how to create a dockerrun.aws.json for this multicontainer docker microservices app in AWS EB?谁能告诉我如何在 AWS EB 中为这个多容器 docker 微服务应用程序创建 dockerrun.aws.json?
【发布时间】:2018-06-10 23:55:41
【问题描述】:

我有两个微服务映像,一个 Go Rest API 和一个 React 前端,它们都在我的 AWS ECR 中。我将使用 Elastic Beanstalk。现在,因为我相信它们在同一台机器上,所以我将 React 应用程序配置为从 localhost:8080 上的 API 获取数据。以下是两者的 Dockerfile。它们在我的开发环境中工作,所以我将它们推送到我的 ECR。

Golang Rest API 的 Dockerfile

FROM golang
ADD . /go/src/vsts/project/gorestapi
WORKDIR /go/src/vsts/project/gorestapi
RUN go get github.com/golang/dep/cmd/dep
RUN dep ensure
RUN go install .
ENTRYPOINT /go/bin/gorestapi
EXPOSE 8080

用于 React 前端应用程序的 Dockerfile

FROM node:8.4.0-alpine
WORKDIR /usr/src/app
ENV NPM_CONFIG_LOGLEVEL warn
RUN npm i -g serve
CMD serve -s build/app -p 3000
EXPOSE 3000
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build

我不知道是否还需要声明卷或挂载点,我只知道我需要将 dockerrun json 的版本以及容器定义中的名称、图像和端口映射放在那里。大多数示例都令人困惑,因为它们都没有显示来自私人仓库的应用程序,并且它们具有那些我不太了解如何使用的卷、挂载点、链接。我尝试了下面的一个,但它不起作用

编辑:(我更改了 Dockerrun.aws.json 期望 Volume Host SourcePath 成为我机器中的路径。如果我错了,请更正)

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "webapp",
      "host": {
        "sourcePath": "/webapp"
      }
    },
    {
      "name": "gorestapi",
      "host": {
        "sourcePath": "/gorestapi"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "gorestapi",
      "image": "<acctId>.dkr.ecr.us-east-1.amazonaws.com/dev/gorestapi:latest",
      "essential": true,
      "memory": 512,
      "portMappings": [
        {
          "hostPort": 8080,
          "containerPort": 8080
        }
      ],
      "links": [
        "webapp"
      ],
      "mountPoints": [
        {
          "sourceVolume": "gorestapi",
          "containerPath": "/go/src/vsts/project/gorestapi"
        }
      ]
    },
    {
      "name": "webapp",
      "image": "<acctId>.dkr.ecr.us-east-1.amazonaws.com/dev/webapp:latest",
      "essential": true,
      "memory": 256,
      "portMappings": [
        {
          "hostPort": 3000,
          "containerPort": 3000
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "webapp",
          "containerPath": "/usr/src/app"
        }
      ]
    }
  ]
}

我是否为路径指定了正确的值?

【问题讨论】:

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


    【解决方案1】:

    是的,如果您想使用它们,您仍然需要定义卷及其挂载点。这是我认为关于设置多容器环境的更全面的指南,直接来自官方文档,而且他们有一个私有存储库部分。希望对您有所帮助>>https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun 此外,请考虑研究 EC2 容器服务 (ECS),但是,Elastic Beanstalk 确实在后台使用它来运行多容器环境,但直接在 ECS 上运行它们可能更容易。

    【讨论】:

    • 我应该在卷的源路径中指定什么?该图像的来源所在的文件夹的名称?还是构建文件夹?还是整个项目?还有挂载点的容器路径,它是什么?我之前尝试过使用卷和挂载点,但部署失败
    • 卷源路径是主机上要挂载到给定容器路径(容器内的文件夹)的文件夹的绝对路径。我有兴趣在部署失败时查看错误日志。
    • 我目前正在研究如何查看错误日志,但请查看上面的编辑
    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多