aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发

embedded/2024/12/26 13:09:06/

aws_0">aws(学习笔记第十九课)

  • 使用ECSFargate进行容器开发

学习内容:

  • 使用本地EC2中部署docker应用
  • 使用ECSEC2模式进行容器开发
  • 使用ECSFargate模式进行容器开发

1. 使用本地EC2中部署docker应用

  1. docker整体
    在这里插入图片描述
    这里展示了docker的整体流程。

    • 开发阶段
      • 编写dockerfile,定义整个docker应用。(1. build
      • build docker image的过程中会从git repository pull业务代码(2. pull business code
      • build之后的docker image pushdocker repository(3. push
      • ec2 instance上,pull docker image from docker repository,之后执行docker image
        docker的一个目的就是Build once,Run anywhere(搭建一次,到处能用)
  2. docker的概念

    • WHY CONTAINERS?
    Containers allow developers to iterate at high velocity and offer the speed to scale to meet the demands 
    of the application. It’s first important to understand what a container is, and how it enables teams to 
    move faster.
    • WHAT IS A CONTAINER?
    Containers provide a standard way to package your application’s code, configurations, and dependencies 
    into a single object.
    Containers share an operating system installed on the server and run as resource-isolated processes, 
    ensuring quick, reliable, and consistent deployments, regardless of environment.
    Whether you deploy locally on your laptop or to production, the experience will remain the same
    WHAT IS DOCKER?
    • Docker is a software platform that allows you to build, test, and deploy applications quickly.
    • Docker packages software into standardized units called containers that have everything the software 
    needs to run including libraries, system tools, code, and runtime.
    • Whether you are running on Linux, Windows, or macOS, you can run containers!
    
  3. 启动EC2,并启动docker应用

    • 启动一个EC2实例
      在这里插入图片描述
    • 进入EC2实例,安装和启动docker
      • ssh链接实例后,开始安装docker
        sudo -i
        yum install docker -y
        systemctl start docker
        systemctl enable docker
        docker info
        
      • 编写dockerfile文件
        FROM ubuntu:18.04# Install dependencies
        RUN apt-get update && \apt-get -y install apache2# Install apache and write hello world message
        RUN echo 'Hello World!' > /var/www/html/index.html# Configure apache
        RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.shEXPOSE 80
        CMD /root/run_apache.sh
        
      • 运行docker命令build
        sudo docker build -t hello-world .
        
        注意,这里需要sudo权限执行docker命令
      • 运行docker命令开始运行
        sudo docker run -i -t -p 80:80 hello-world
        
    • 访问EC2实例的80端口
      在这里插入图片描述

2. 使用ECSEC2模式进行容器开发

  1. ECS的整体概念
    在这里插入图片描述

    • 首先定义task
      这个是application的核心,它定义了这个应用程序的docker image,这里docker image不太合适,应该叫ECSjson定义,也就是ECStask的静态定义。
    • 其次定义一个cluster
      有了静态定义,还需要动态定义,即执行环境。这是task的执行环境定义。
    • 最后定义service
      这里就是一个粘合剂,把task(静态定义)和cluster(动态定义)进行结合起来。
  2. 进入ECS,首先进行任务定义(静态定义)

    • 使用json定义任务
      {"family": "yourApp-demo","containerDefinitions": [{"volumesFrom": [],"portMappings": [{"hostPort": 80,"containerPort": 80}],"command": null,"environment": [],"essential": true,"entryPoint": null,"links": [],"mountPoints": [{"containerPath": "/usr/local/apache2/htdocs","sourceVolume": "my-vol","readOnly": null}],"memory": 300,"name": "simple-app","cpu": 10,"image": "httpd:2.4"},{"volumesFrom": [{"readOnly": null,"sourceContainer": "simple-app"}],"portMappings": [],"command": ["/bin/sh -c \"while true; do echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>' > top; /bin/date > date ; echo '</div></body></html>' > bottom; cat top date bottom > /usr/local/apache2/htdocs/index.html ; sleep 1; done\""],"environment": [],"essential": false,"entryPoint": ["sh","-c"],"links": [],"mountPoints": [],"memory": 200,"name": "busybox","cpu": 10,"image": "busybox"}],"volumes": [{"host": {"sourcePath": null},"name": "my-vol"}]
      }
      
    • 像如下一样,使用json定义一个ECStask
      在这里插入图片描述
    • 之后该task会被激活
      在这里插入图片描述
  3. 接着进行cluster定义
    在这里插入图片描述
    进行了各种设定之后,创建ECScluster,这个是用于执行task的执行环境
    但是,这里创建了之后,还是没有执行起来task,之后会创建taskclustser的粘合剂,即service

  4. 进行service的定义

    • 选择cluster之后,进入,并选择service进行创建。
      在这里插入图片描述
    • 按照执行的选项进行service的创建
      在这里插入图片描述
      负载均衡器这里不选择创建
  5. 访问service

    • 访问task,之后点击simple-app,确认网络绑定这里。
      在这里插入图片描述
    • 使用网络绑定的地址进行访问
      在这里插入图片描述
  6. 查看EC2

    • 查看EC2,确认该ECScluster创建的EC2实例。
      在这里插入图片描述
    • 强制删除这个EC2实例
      可以看到,强制删除了正在运行的唯一的EC2之后,过了一会,ECS会自动创建出另一个EC2
      在这里插入图片描述
      *继续访问task的网络配置,还是能够访问该服务
      但是由于没有使用ALB Application Load Balancer或者NLB Network Load Balancer,这里的IP地址变成其他的了。
      总结一下,EC2的模式下,ECS上启动的image之后,是能够看到EC2 instance的,接下来的Fargate就看不到了,接下来体验下Fargate
      在这里插入图片描述

3. 使用ECSFargate模式进行容器开发

  1. 使用Fargate进行开发
    • 创建一个fargate的集群
      注意,这里选择AWS Fargate类型,它和EC2的区别是EC2模式,能见到EC2 instance,但是Fargate模式下,看不到EC2
      在这里插入图片描述
    • 对任务task做出修改
      默认的任务不支持Fargate,到了创建服务service的时候会报错。
      在这里插入图片描述
    • 对任务task做出修改让其适应Fargate
      在这里插入图片描述
    • 访问Fargateservice在这里插入图片描述
    • 查看EC2
      可以看到没有创建EC2,这里Fargate的模式,是不能见到外在的EC2 instance的。 在这里插入图片描述

http://www.ppmy.cn/embedded/148899.html

相关文章

比 SaaS 更具性价比,火山引擎云数仓 ByteHouse 上新“云托管”模式

本地部署、SaaS 部署、私有化部署.....都是常见的软件部署方式。企业往往从安全、成本、易用性等多角度综合选择部署方式。SaaS 往往被认为初始成本更低、具备更强扩展性&#xff0c;但由于数据存储在软件供应商的服务器上&#xff0c;一些对数据安全和隐私要求高的企业会对此存…

HarmonyOS NEXT 实战之元服务:静态案例效果--- 手机一键加速、手机垃圾清理

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …

java高频面试之SE-05

面试官&#xff1a;java中为什么有多态&#xff1f; 面试官你好&#xff01;Java 中有多态主要是为了实现灵活性和可扩展性。通过多态&#xff0c;可以用统一的接口处理不同的对象&#xff0c;从而提高代码的可维护性和可复用性。以下是多态的几个关键原因&#xff1a; 1. 代…

不在广东想把自己的IP变成广东怎么办

点击这篇文章的读者中&#xff0c;很多可能需要将自己的本机IP地址修改为广东省的IP地址。那么如何操作才能切换到广东省呢&#xff1f;如果您人不在广东省内&#xff0c;但是在国内的其他地区&#xff0c;这时可使用支持切换IP地址的软件进行辅助。 随着代理IP技术在网络中得到…

如何根据一系列提交文件,匹配对应的git提交记录?用ai

显示提取提交文件记录的git历史&#xff08;用的豆包写一下&#xff09; 显示每次提交涉及的文件名及提交注释等基本信息 可以使用以下命令格式&#xff1a; git log --name-only --prettyformat:“%an - %s” myFolder/ –name-only选项的作用是在显示提交信息时&#xff0…

【Leetcode】855. 考场就座

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 在考场里&#xff0c;有 n n n 个座位排成一行&#xff0c;编号为 0 0 0 到 n − 1 n - 1 n−1。 当学生进入考场后&#xff0c;他必须坐在离最近的人最远的座位上。如果有多个…

C语言-基因序列转换独热码(one-hot code)

1.题目要求 (语言: C)在生物信息学家处理基因序列时&#xff0c;经常需要将基因序列转化为独热码&#xff0c;在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特&#xff0c;而且只有一个比特为1&#xff0c;其他全为0的一种码制。 如基因序列有四种状态&…

云手机服务器如何做到群控多台手机的?

亚矩阵云手机服务器解决方案是基于ARM集群芯片和虚拟化技术的一站式解决方案&#xff0c;具有高性能&#xff0c;高集成度的特点&#xff1b;支持一键操控、应用多开、真机检测等功能&#xff1b;广泛适用于舆情监测、海外推广、APP检测、政务云手机等场景。 亚矩阵云手机服务器…