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

news/2024/12/28 3:06:28/

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/news/1558676.html

相关文章

Kibana安装教程——Linux

Kibana安装教程——Linux 一、安装 下载安装包&#xff1a; 官网下载地址&#xff1a;https://www.elastic.co/cn/downloads/kibana 上传包到linux 切换到安装目录下 解压&#xff1a;tar -zxvf kibana-7.17.1-linux-x86_64.tar.gz 重命名安装文件夹 mv kibana-7.17.1-linux-x…

向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手

随着生成式人工智能技术的飞速发展&#xff0c;越来越多的人和企业开始应用AI到日常的工作和生活中。但公域的AI助手其数据来自互联网上的大量公开文本&#xff0c;虽然具有广泛的知识&#xff0c;但在面对一些特定领域的专业问题时&#xff0c;可能会出现回答不够准确或深入的…

R 和 Origin 完成细菌 OTU 表、土壤理化性质数据的微生物 Beta 多样性分析

使用 R 进行分析与可视化 1. 数据准备 假设已经有细菌 OTU 表&#xff08;以表格形式存储&#xff0c;行是样本&#xff0c;列是 OTU&#xff09;和土壤理化性质表&#xff08;行是样本&#xff0c;列是不同的理化性质指标&#xff09;。 # 读取数据 otu_table <- read.c…

MAE 随机掩码自编码器:高掩码率 + 非对称编码器-解码器架构,解决视觉数据冗余特征、计算冗余消除

MAE 随机掩码自编码器&#xff1a;高掩码率 非对称编码器-解码器架构&#xff0c;解决视觉数据冗余特征、计算冗余消除 论文大纲理解1. 确认目标2. 问题分解3. 实现步骤4. 效果展示5. 金手指 观察和假设观察现象提出假设验证过程 解法拆解1. 技术拆解2. 逻辑链分析3. 隐性方法…

SDK 作为虚拟示波器配备的一个 Windows 标准 DLL 接口,通过这个接口可以直接控制虚拟示波器,并获得示波器采集的数据

SDK参考手册 1.简介 SDK 作为虚拟示波器配备的一个 Windows 标准 DLL 接口&#xff0c;通过这个接口可以直接控制虚拟示波器&#xff0c;并获得示波器采集的数据。该 SDK 支持 MDSO、MDSO-LA、HDSO、DDSO、ISDS205、 ISDS210、ISDS220 和 SDS2062 设备。 2.初始化和结束 调用In…

数字存在科学计数法后的转换方法

最近在开发中&#xff0c;发现了客户的数据使用了科学计数法&#xff0c;但是前端直接显示的话不太好看&#xff0c;因此写了转化回数字的方法 如下&#xff1a; function zhnum(x) { if (Math.abs(x) < 1.0) { var e parseInt(x.toString().split(‘e-’)[1]); if (e) { …

自然语言处理与知识图谱的融合与应用

目录 前言1. 知识图谱与自然语言处理的关系1.1 知识图谱的定义与特点1.2 自然语言处理的核心任务1.3 二者的互补性 2. NLP在知识图谱构建中的应用2.1 信息抽取2.1.1 实体识别2.1.2 关系抽取2.1.3 属性抽取 2.2 知识融合2.3 知识推理 3. NLP与知识图谱融合的实际应用3.1 智能问答…

【前沿 热点 顶会】AAAI 2025中与目标检测有关的论文

CP-DETR: Concept Prompt Guide DETR Toward Stronger Universal Object Detection&#xff08;AAAI 2025&#xff09; 最近关于通用物体检测的研究旨在将语言引入最先进的闭集检测器&#xff0c;然后通过构建大规模&#xff08;文本区域&#xff09;数据集进行训练&#xff0…