我有两个微服务图像,一个Go Rest API和一个React前端,它们都在我的AWS ECR中。我将使用Elastic Beanstalk。现在因为我相信它们在同一台机器上所以我配置了React应用程序以从localhost:8080上的API获取数据。以下是两者的Dockerfiles。他们在我的开发环境中工作,所以我把它们推到了我的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 Frontend App的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的版本放到v2以及容器定义中的名称,图像和端口映射。大多数样本都很容易混淆,因为它们都没有显示来自私人仓库的应用程序,并且它们具有那些我真不了解如何使用的卷,挂载点,链接。我尝试了下面的那个,但它不起作用
编辑:(我更改了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"
}
]
}
]
}
我是否为路径指定了正确的值?
答案 0 :(得分:0)
是的,如果要使用它们,仍需要定义卷及其挂载点。在我看来,这是一个更全面的指南,关于建立一个多容器环境,直接从官方文档加上他们有一个私有存储库部分。希望有帮助&gt;&gt; https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun 此外,考虑查看EC2容器服务(ECS),但是,Elastic Beanstalk确实在后台使用它来运行多容器环境,但可以更容易直接在ECS上运行它们。