【问题标题】:Docker or Docker for AWS and Deployment on AWS EC2Docker 或 Docker for AWS 和 AWS EC2 上的部署
【发布时间】:2017-09-30 22:41:01
【问题描述】:

这里有 2 个问题。

我试图弄清楚普通Docker 和Docker for AWS 之间的主要区别是什么。

对于我的项目,我将运行一个用 Angular 2 编码的 GUI,打包在 AWS EC2 上的 Docker 容器中。

1) 我应该为我的目的使用 Docker for AWS 吗?

2) Docker 是否有可能 [1] 从 GITHUB 存储库获取我的代码并 [2] 在我运行 docker 时构建它?

3) 在 AWS 上部署 Docker 容器的最佳方式是什么? 是否有可遵循的指南或一些最佳实践示例?

提前谢谢你!

【问题讨论】:

    标签: angular amazon-web-services docker amazon-ec2 dockerfile


    【解决方案1】:

    1) 我应该为我的目的使用 Docker for AWS 吗?

    Docker for AWS 通过 CloudFormation 提供自我修复基础设施。如果您需要为您的应用程序自动缩放,那么这是一个不错的选择。但是,成本会增加。

    2) Docker 是否有可能 [1] 从 GITHUB 存储库获取我的代码并 [2] 在我运行 docker 时构建它?

    使用 GitHub 网络钩子/集成,您可以通过 Jenkins / Travis / ANOother CI 工具为您构建图像。这可以将映像发布到 Docker Hub,或自托管/第三方注册表。

    3) 在 AWS 上部署 Docker 容器的最佳方式是什么?是否有可遵循的指南或一些最佳实践示例?

    每个用例都是不同的。这是为了测试吗?演示?生产?恐怕要解决这个问题的因素太多了。

    编辑:

    3) 目前是为 Demos porpuse 准备的

    我只需启动一个 EC2 实例并安装 docker-engine 并使用它

    【讨论】:

    • 感谢您的回复! 3) 目前是为 Demos porpuse 准备的。
    • 只使用一个 EC2 实例 :)
    • 经过我的研究,可以构建我的 angular 2 App ng build -prod 并在 AWS 的 S3 上运行它们,对吗?这种方式会比将此构建放在Docker-Container 中并在EC2 实例上使用网络服务器nginx or node.js(还有什么更好?)更好吗?什么更经济有效或不会使部署过程变得复杂?
    • 是的,您当然可以将它托管在 S3 上。如果您需要 SSL 终止,那么您需要使用 CloudFront,这将涉及解决缓存破坏和其他复杂性。只要不断提出问题,人们就会尽最大努力提供帮助:)
    【解决方案2】:

    @Rawkode 很好地解释了一切。我将在您的最后一点上添加一些内容。 要使用 ec2 实例运行基于 docker 的应用程序,您可以使用

    在 Amazon EC2 容器服务 (Amazon ECS) 上部署 Docker 容器

    Amazon EC2 Container Service (Amazon ECS) 是您用来在可扩展集群上运行 Docker 应用程序的 Amazon Web 服务。

    您可以使用 docker 运行您的 Angular 应用程序。正如您在评论中提到的,您可以使用ng build --prod。哪个为您构建和创建 dist 文件夹。这里是我如何在 AWS 中部署基于 Angular Docker 的应用程序。

    首先,创建一个快速服务器,它将为您的静态文件提供服务。

       var express =     require('express');
       var path = require('path');
       var router = express.Router();
       var app = express();
       // serve angular front end files from root path
       app.use('/', express.static('dist', {
           redirect: false
       }));
       // rewrite virtual urls to angular app to enable refreshing of internal 
       pages
       app.get('*', function(req, res, next) {
           res.sendFile(path.resolve('dist/index.html'));
       });
    
       app.listen(3000, function(req, res) {
           console.log("start");
       })
    

    所以这将为您的角度静态文件提供服务,S3 您将面临刷新错误,可以使用重写规则解决。 为 express 创建 docker 文件,express 将处理静态文件

        FROM alpine
    RUN apk update && apk upgrade
    RUN apk add nodejs
    RUN mkdir -p /app
    ADD app/package.json /app
    WORKDIR /app/
    ENV HOME /app
    ENV NODE_ENV development
    RUN npm install
    ADD app /app
    EXPOSE 3000
    CMD npm start
    

    在快速服务器文件所在的app文件夹中,将dist文件夹放在同一目录中。

    现在要部署基于 docker 的应用程序,请访问此链接

    https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/

    在 AWS 上托管 Web 应用程序的最佳实践

    以上我只是试图解释如何在 AWS ECS 上运行 Angular 应用程序,您可以通过运行同一任务的多个副本并配置 负载均衡器.

    至于最佳实践是对 Web 应用程序的关注

    对于静态应用程序

    更多详情best-practices-for-hosting-web-applications-on-aws

    Docker 和 AWS 联手让在 Amazon 的 EC2 基础设施上部署企业容器即服务 (CaaS) Docker 环境变得比以往更容易。在 AWS 上运行 Docker Datacenter 可为开发人员和 IT 运营人员提供一种高度可靠、低成本的方式,只需单击一下即可部署生产就绪型工作负载。

    https://www.docker.com/aws

    secrets-for-amazon-ec2-container-service

    aws-for-startups-architectural-best-practices-automating-your-infrastructure

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 2016-10-14
      • 2017-12-30
      • 2019-02-23
      • 2019-05-04
      • 1970-01-01
      • 2020-05-03
      • 2021-04-09
      • 2017-01-29
      相关资源
      最近更新 更多