将 Docker 映像部署到 AWS 弹性 beantalk

Posted

技术标签:

【中文标题】将 Docker 映像部署到 AWS 弹性 beantalk【英文标题】:Deploying Docker image to AWS elastic beanstalk 【发布时间】:2020-12-16 22:28:21 【问题描述】:

我在tutorial 之后创建了一个 Spring Boot 应用程序。按照教程,我设法使用以下命令对我的应用程序进行 dockerize:

docker-compose up 

我的 docker-compose.yml 文件:

version: '3'
services:

  app:
    build: .
    volumes:
    - .:/app
    - ~/.m2:/root/.m2
    working_dir: /app
    ports:
    - 8080:8080
    command: mvn clean spring-boot:run

当我之后检查 docker 图像时,我会看到应用程序的新图像。现在我想将此应用程序部署到 AWS 弹性 beantalk。使用 docker 平台创建环境时,我需要为应用程序代码上传什么?如何将我的 docker 镜像上传到 aws?我找不到关于如何将 dockerized 应用程序/图像部署到这样的 aws 的好教程。我是 docker 新手,因此我们将不胜感激!

【问题讨论】:

【参考方案1】:

2020 年 10 月更新

Docker-compose 现在得到 EB 的正式支持

AWS Elastic Beanstalk Adds Support for Running Multi-Container Applications on AL2 based Docker Platform

原答案如下

EB 不支持 docker-compose。要制作您的容器(是单容器设置还是多容器设置?)您必须使用single 或multi-container EB 平台。

在这两种情况下,您都必须将您的 docker-compose.yml 翻译成 Dockerrun.aws.json。该文件具有不同的形式,具体取决于您使用的是单容器设置还是多容器设置。

如何将我的 docker 映像上传到 aws?

如果它的单一 EB 设置,您只需将您的 Dockerfile 提供给 EB,它会为您处理一切。对于多容器 EB,您可以将图像存储在公共存储库(例如 dockerhub)或私有存储库(例如 ECR)中。

要将您的docker-compose.yml 文件翻译成Dockerrun.aws.json,您可以尝试使用container-transform 工具。这可能会有所帮助,但您很可能需要手动对生成的文件进行进一步调整。

【讨论】:

谢谢!这让我明白了很多!据我了解,从我的 docker-compose.yml 文件(我更新了我的问题以包含该文件),这是一个单一的容器设置。我对吗?还是服务不是容器?在单个 EB 设置的情况下,您说我可以将 Dockerfile 提供给 EB,我该怎么做?我需要在 EB cli 中执行此操作吗? @AlfieDanger 嗨。没问题。很高兴它有帮助 :-) 是的,你可以使用你的 Dockerfile。 EB 将构建映像。是的,您也可以使用 eb cli。详情here。 这个答案不再准确。截至 2020 年 10 月 7 日,Elastic Beanstalk does officially support multi-container setups using a docker-compose.yml file。 (这只是在我们上次部署时烧毁了我们,因为我们使用 docker-compose 进行本地开发测试,但只有生产环境中的 Dockerfile。) @beporter 感谢您告诉我。我会更新答案。

以上是关于将 Docker 映像部署到 AWS 弹性 beantalk的主要内容,如果未能解决你的问题,请参考以下文章

带有 docker 的 AWS Elastic Beanstalk 版本不正确

将映像从 aws ecr 部署到 aws elastic beanstalk

用于在 AWS EC2 中构建和部署 docker 映像的 CI/CD 脚本

带有 Amazon ECR Docker 映像的 AWS Elastic Beanstalk

AWS Elastic Beanstalk Docker 来自 ECR 错误“Dockerrun.aws.json 中未指定 Docker 映像”

具有 Auto Scaling 与弹性容器服务 (ECS) 的 AWS EC2 - Docker