Advertisement

Getting Started with AWS EC2 and Docker Containers on U

阅读量:

作者:禅与计算机程序设计艺术

1.简介

云计算如今已全面渗透至多个行业,包括网络、安全、存储等多个领域,已成为现代IT基础设施中不可或缺的重要组成部分。其中,亚马逊公司的EC2服务作为一种基于云计算的服务器平台,为开发者提供了按需付费的服务模式,特别适用于各种应用程序部署需求。作为专业的云服务提供者,AWS EC2不仅为用户提供强大的计算资源,还囊括了从主机服务器到网络、存储、安全及服务管理等全方位的基础设施支持。与此同时,Docker作为一个广受认可且免费的开源工具,允许开发者将应用程序及其依赖项打包成轻量级、高移植性的容器环境,并能在任何主流的操作系统上运行。相比于传统虚拟机配置,Docker在部署效率和扩展性方面具有显著优势:一方面能够加速应用部署流程,减少开发者的负担;另一方面则使得运维工作更加便捷高效。值得注意的是,Docker能够共享宿主机内核资源,因此其启动速度明显快于虚拟机配置。本文将通过实际操作演示AWS EC2与Docker协同工作的过程,并指导读者完成个人 Ubuntu Linux 服务器的搭建及运行一个简单的 Python Flask Web 服务实例

2.AWS EC2相关知识

2.1 EC2实例类型

AWS EC2涵盖不同功能定位的实例配置方案,每种配置都针对特定业务场景进行了专业优化。例如,T2系列实例如何?它们专为CPU性能强而设计,适合内存需求较低的任务;而C5系列实例如何?它们则更适合计算密集型任务。 AWS官方文档详细介绍了这些实例类型的特点,访问地址为https://aws.amazon.com/ec2/instance-types/.

2.2 IAM权限控制

访问AWS EC2时,请确保先创建一个IAM账户,并根据其职责分配相应的安全策略。最基础的策略是将用户的权限扩展至整个系统范围——这可能带来较大的安全风险。为了避免潜在的安全漏洞,在分配EC2操作相关的权利时,请仅授予必要的功能模块。通过以下步骤可以实现这一目标:

访问AWS Management Control Panel并选择IAM选项。
在左侧导航栏中点击"用户"选项卡,并点击"新增用户"按钮来创建新账户。
在新增用户的对话框内,请输入用户名,并选择编程访问权限;同时勾选直接关联现有政策的选项。
接下来,请点击‘权限’页面中的‘下一步’按钮。
在权限设置页面,请选择直接绑定现有策略的模式。
完成上述步骤后,请检查输入信息无误并再次确认。
最后,请点击‘完成’按钮来注册新账户。
打开注册后的页面后,请定位到刚刚注册的账户,并点击显示密码按钮获取临时密码;之后我们将使用该密码来登录AWS EC2 CLI。

2.3 SSH密钥对

当我们第一次连接到AWS EC2实例时,会看到如下提示:

复制代码
    The authenticity of host 'xxx (xxx)' can't be established.
    ECDSA key fingerprint is SHA256:xxxxxx.
    Are you sure you want to continue connecting (yes/no)?
    
      
      
    
    代码解读

如果选择确认,则采用SSH私钥加密身份信息传输至AWS EC2服务器以保证正确连接而非受欺骗。通过以下方式可以获得密钥对:这里有一个工具可供使用。

在终端输入:

复制代码
    ssh-keygen -t rsa
    
    
    代码解读

按回车键后,按照指示输入文件的保存路径和密码。随后会生成两个关键文件: id_rsa 和 id_rsa.pub。请注意: id_rsa 是用于私钥操作的保密文档;相反地(id rsa pub)作为公钥文档则可广泛传播

复制代码
    Host ec2
    HostName xxx.amazonaws.com
    User ubuntu
    IdentityFile ~/.ssh/id_rsa
    
      
      
      
    
    代码解读

为了实现与AWS EC2服务器的连接,请在$HOME/.ssh/config文件末尾添加相应的配置参数,并使用ssh ec2命令进行连接。

2.4 安全组规则

一旦EC2实例成功创建,我们需要对实例进行防火墙配置。防火墙规则决定了哪些IP地址可以被允许访问该实例的服务。在默认情况下,没有入站的网络连接;只有来自AWS内部的连接才能访问该EC2实例。通过配置安全组规则,我们可以限制出站流量的来源和目的IP地址。安全组提供了灵活的方式,以根据不同的应用场景和需求定制复杂的防火墙策略。

2.5 实例生命周期

实例运行过程中经历了三个主要的状态阶段: PendingRunningTerminated。其中,Pending 状态表明实例正处于静默期,无法接收外部请求;Running 状态表明实例正常运行,具备接收外部请求的能力;而 Terminated 状态则意味着该资源已不再被维护,即将被移除或终止使用。

通常是由系统内部因素导致的,例如资源不足是一个常见原因。
具体操作步骤包括查看日志文件,排查故障根源,如磁盘空间不足等。
运行状态通常无需额外干预,只需正常处理外部请求即可。
当遇到突发状况时(如系统崩溃、断电或网络中断等),实例可能会切换到Terminated状态;此时可以通过启动备用实例来替代当前正在运行的实例。

3.Docker相关知识

3.1 Docker概念

Docker是一个开源的应用容器平台,支持快速构建轻量级且易于迁移的容器,能够在分布式系统环境中实现无缝部署与运行。其核心功能包含封装服务、隔离执行机制以及资源优化迁移策略。

3.1.1 封装

Docker借助封装与隔离机制,使得开发者能够将应用程序及其所需的依赖项整合到称为镜像的文件包中;通过这些镜像文件,开发者能够构建出独立运行的容器环境。这样一来,多个开发团队便能够共享相同的运行环境,从而显著降低了配置时间和资源浪费的问题。

3.1.2 隔离

Docker利用单个Linux命名空间中的进程和资源执行,从而实现各容器间的完全隔离状态。这表明,各容器彼此独立运行,系统调用也不会扩散到其他容器或宿主机上。这也确保了容器内部的操作不会影响主机环境的同时,也保障了整体系统的安全性

3.1.3 迁移

该容器化平台能够支持跨平台部署,并在云端和数据中心之间无缝迁移应用程序。这样一来, 开发者就能方便地将应用从一个环境迁移到另一个环境, 或者将其部署到多个环境中进行管理。

3.2 安装Docker

已有Docker官方发行版能够覆盖主流Linux发行系统。
对于尚未体验过Docker的人来说,在官网上下载并安装官方版本是最佳选择。
此外,在基于Debian的操作系统上运行Docker时,建议使用apt-get命令进行更新和升级操作。

复制代码
    sudo apt-get update && sudo apt-get install docker.io
    
    
    代码解读

安装完成后,运行docker命令查看是否安装成功:

复制代码
    $ sudo docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    ca4f61b1923c: Pull complete 
    Digest: sha256:be4060a0ee92c2d3cf7e2cc17ba8c55b67dd2fa192d9ba7da1d4d3a542cd2fc8
    Status: Downloaded newer image for hello-world:latest
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    ...
    
      
      
      
      
      
      
      
      
    
    代码解读

3.3 使用Dockerfile构建镜像

Dockerfile是一种用于构建Docker镜像的文件,在其中包含了多种指令序列以实现自动化构建过程。该文件主要由四个组成部分构成:基础镜像,依赖软件,安装软件以及启动命令等核心模块。

3.3.1 基础镜像

Dockerfile中的第一条指令必须指定基础镜像。例如:

复制代码
    FROM python:3.7-slim
    
    
    代码解读

3.3.2 依赖软件

在Docker构建过程中,常见的做法是为容器环境预先安装必要的开发工具和依赖软件,以确保最终生成的 Docker 镜像能够在不同环境中顺利运行。

复制代码
    RUN pip install flask==1.1.1 \
      && mkdir /app \
      && touch /app/__init__.py
    
      
      
    
    代码解读

3.3.3 安装软件

Dockerfile也可用于软件的部署与管理。例如,以下命令用以安装 nginx 服务器:

复制代码
    RUN apt-get update && apt-get install nginx
    
    
    代码解读

3.3.4 启动命令

Dockerfile文件中不仅包含安装软件的部分内容,还涉及其他必要的配置设置。例如,以下命令用于启动 nginx 服务器:

复制代码
    CMD ["nginx", "-g", "daemon off;"]
    
    
    代码解读

以上命令表示启动nginx服务,并在后台运行。

4.运行Python Flask Web服务

4.1 创建EC2实例

登录AWS管理控制台后,在服务菜单中选择EC2服务选项。随后单击位于右上方的"Launch Instance"按钮;这将引导您跳转至'Choose an Amazon Machine Image (AMI)'页面。在该页面中的镜像列表中,请您选择带有Ubuntu Server 18.04 LTS(基于Hyper-V虚拟化)以及SSD存储类型的'Ubuntu Server 18.04 LTS (HVM), SSD Volume Type'镜像;最后单击位于页面下方依次进行配置的Next按钮以完成配置流程。

在配置实例细节页面中,请为实例命名并设置其所属的VPC、子网以及实例类型等其他相关信息。完成这些设置后,请点击下一步按钮。在此处无需添加额外的存储卷。

在设置磁盘大小与类型时,请注意,默认值通常是合理的选择。接着,请点击NEXT:添加标签按钮。

在"Add Tags"页面上,能够对实例施加标签以实现更好的管理功能。无需在此时添加任何标签。点击"Configure Security Group"按钮。

在配置安全组页面上,我们的目标是为了实现实例网络访问权限的管理而创建一个安全组。为此安全组指定名称后,即可点击生成新安全组的按钮以完成设置。

在出现的"Create Security Group"对话框中,配置安全组名称、描述以及所属VPC和区域等信息。接着,调整规则表,根据需要添加相应的入站与出站规则。调整完成后,点击"Review and Launch"按钮。

在'Review and Launch'页面上,可访问所有详细配置参数。确认无误后,该系统会自动触发'Launch'按钮的点击事件。

4.2 配置SSH访问

一旦实例启动成功,则需配置SSH远程接入。进入AWS管理控制台后,请选择云服务器服务选项,并单击位于右上方的Connect按钮;随后,请点击Session Manager链接即可接入终端控制台。此为一个易于使用的Web界面,可方便地管理云服务器。

在GetStarted页面单击EnableSessionManagerAccess按钮以实现SSH会话管理。
随后单击InstanceConnect按钮打开一个新的浏览器窗口并执行以下操作:
请按照以下步骤在终端中输入所需指令:

复制代码
    ssh -i "/path/to/your/private-key.pem" ubuntu@ec2-ip-address.compute-1.amazonaws.com
    
    
    代码解读

在此位置上, "ec2-ip-address" 表示 EC2 实例的公网 IP 地址, 你可以通过该位置上的 "Description" 页面查看详细信息。"/path/to/your/private-key.pem" 表示你创建的 EC2 密钥对的私钥文件路径。通过该命令我们可以轻松实现连接到指定 EC2 实例的目标。使用下面列出的命令可以验证连接状态:

复制代码
    uname -a
    
    
    代码解读

4.3 在实例中安装Docker

当实例已成功连接后,我们能够顺利地进行Docker的部署. 为了高效地安装最新的Docker容器引擎(CE)版本,请按照以下步骤操作.

复制代码
    sudo apt-get update && sudo apt-get install curl gnupg2 software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
    sudo apt-get update && sudo apt-get install docker-ce
    
      
      
      
    
    代码解读

安装完成后,输入以下命令验证Docker是否安装成功:

复制代码
    sudo docker version
    
    
    代码解读

4.4 拉取镜像并运行容器

如同我们在本地环境中进行操作一样,在pull image and run container这个过程中,我们依次首先是从一个Ubuntu镜像开始构建,并为该服务搭建一个命名为myweb的Docker容器。

复制代码
    sudo docker pull ubuntu:latest
    sudo docker create --name myweb ubuntu bash
    
      
    
    代码解读

启动容器:

复制代码
    sudo docker start myweb
    
    
    代码解读

然后,我们就可以通过SSH登录到容器中进行操作了。

4.5 安装Python和Flask

在容器内已预置了Ubuntu的标准开发环境,在这种情况下我们只需将Python与Flask一同安装即可启动基于Flask的Web服务。请按照以下步骤进行操作以安装Python及Flask:

复制代码
    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install python3 python3-pip
    pip3 install flask
    
      
      
    
    代码解读

4.6 编写Python Flask Web服务

创建名为app.py的文件,写入以下的代码:

复制代码
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
    return 'Welcome to Python Flask Web Service!'
    
    if __name__ == '__main__':
    app.run()
    
      
      
      
      
      
      
      
      
      
    
    代码解读

Flask是一种轻量级的网络框架,在设计上注重通过路由机制来处理HTTP请求。在此处实现了这样一个功能:当访问路径为"/"时会返回'欢迎访问Python FlaskWebService!'的信息。

4.7 编译镜像

完成Python Flask Web服务后,请问是否需要创建一个Docker镜像?输入以下命令:

复制代码
    sudo docker build -t pyflask.
    
    
    代码解读

此处在-t参数中配置了镜像名称为'pyflask'。它会读取Dockerfile文件并进行编译。

4.8 运行容器

现在已经构建完成了一个运行Python Flask Web服务的镜像,并且已经准备好创建一个Docker容器来运行它。请按照以下步骤操作:

复制代码
    sudo docker run -p 5000:5000 -d pyflask
    
    
    代码解读

-p标志位的作用在于将容器与主机之间对应的端口进行绑定配置。具体而言,在本场景中我们实现了将主机上的5000号端口与容器内部的5000号端口进行一一对应绑定。
-d标志位则被用来指定启动容器的操作环境。通过这一操作可以确保容器能够顺利启动并开始工作。

4.9 测试Web服务

具体而言,测试Web服务的过程与本地环境中进行Web服务测试具有高度相似性。我们可以通过浏览器打开[http://localhost:5000/,预计会显示一个欢迎界面。(注:此处应包含实际内容)

在此阶段,我们成功实现了AWS EC2与Docker的融合,完成了自己 Ubuntu Linux服务器的搭建以及一个简单有趣 Python Flask 应用程序的实际部署.期待本文能激发读者的兴趣与探索欲望.

全部评论 (0)

还没有任何评论哟~