您的位置:首页 > 文旅 > 旅游 > 网站源码建站视频_网页设计感悟与体会_营销网_新闻头条今日要闻最新

网站源码建站视频_网页设计感悟与体会_营销网_新闻头条今日要闻最新

2024/12/23 11:40:32 来源:https://blog.csdn.net/wumingxiaoyao/article/details/142438626  浏览:    关键词:网站源码建站视频_网页设计感悟与体会_营销网_新闻头条今日要闻最新
网站源码建站视频_网页设计感悟与体会_营销网_新闻头条今日要闻最新

AWS 容器注册表服务 ECR

  • AWS ECR 是什么
    • 核心功能
  • ECR 使用场景
  • Docker 镜像
    • Docker 镜像的核心概念
    • Docker 镜像 vs 容器
  • 示例 EC2 上部署一个 Python 应用程序
    • ECR 典型工作流
    • 部署步骤
      • 准备 Python 应用程序
      • 编写 Dockerfile
      • 创建 ECR 仓库
      • 构建和推送 Docker 镜像到 ECR
      • 部署到 EC2 实例
      • 设置 EC2 实例自动启动容器

AWS ECR 是什么

Amazon Elastic Container Registry (ECR) 是 AWS 提供的完全托管的 Docker 容器镜像存储服务,旨在帮助用户存储、管理和部署容器镜像。ECR 集成了 Amazon Elastic Container Service (ECS)、Elastic Kubernetes Service (EKS) 以及 AWS Lambda,提供了安全的、高可用性的容器镜像托管。

核心功能

  1. 镜像存储:ECR 支持存储 Docker 容器镜像,并为其提供弹性存储空间。你可以上传、下载和管理 Docker 镜像。

  2. 安全性
    IAM 权限控制:通过 AWS Identity and Access Management (IAM),你可以精确控制谁可以访问哪些镜像仓库。
    加密:所有存储在 ECR 中的镜像默认通过 AWS KMS 进行加密,传输中的镜像使用 HTTPS 加密。
    镜像扫描:ECR 提供自动化的镜像扫描功能,可以检测已知的漏洞,帮助确保部署的镜像安全。

  3. 与 ECS 和 EKS 集成:ECR 深度集成了 ECS 和 EKS,可以轻松将镜像部署到这些平台上。此外,ECR 还与 AWS Lambda 集成,用于存储和运行容器化的 Lambda 函数。

  4. 高可用性和可扩展性:ECR 是全托管的,AWS 负责底层基础设施的维护,包括高可用性、弹性扩展、备份和灾难恢复等。

  5. 镜像复制:你可以使用 ECR 跨 AWS 区域复制镜像,这对于支持全球部署和提高应用程序的可靠性非常有用。

  6. 生命周期管理:ECR 支持镜像的生命周期策略,你可以自动化管理镜像的保留和过期策略,减少存储空间浪费。

  7. 私有/公共仓库:ECR 提供私有和公共镜像库。私有仓库适用于存储企业内部使用的镜像,而公共库可以公开分享镜像给社区。

ECR 使用场景

  1. 应用程序的容器化部署:通过 ECR 存储和管理你的应用程序镜像,并与 ECS/EKS 集成,实现容器化的应用部署。
  2. 自动化 CI/CD:你可以使用 AWS CodeBuild、Jenkins 等工具,将 ECR 作为容器镜像的注册表,并结合 CI/CD 流程,自动构建、测试、发布镜像。
  3. 跨区域部署:利用 ECR 的镜像复制功能,可以轻松实现全球范围的应用部署。

Docker 镜像

Docker 镜像是一个轻量级的、独立的、可执行的软件包,它包含了运行应用程序所需的所有内容,包括代码、运行时环境、库、依赖项和配置文件。它可以看作是应用程序的只读快照。Docker 镜像是 Docker 容器的基础,当镜像启动后,容器就是它的运行实例。

Docker 镜像的核心概念

  • 层 (Layers):Docker 镜像由多个只读层组成,每一层都是镜像文件系统的一部分。这些层是基于镜像的创建历史记录而生成的,意味着每一次对镜像的修改(如安装新的软件包或更改配置文件)都会形成一个新的层。Docker 使用分层文件系统来优化存储和效率,共享和重用层,以减少冗余。

  • 基础镜像 (Base Image):基础镜像是没有父镜像的 Docker 镜像,通常用于操作系统(如 Ubuntu、Alpine 等)或语言运行时环境(如 Node.js、Python 等)。从基础镜像开始,用户可以创建自定义的镜像。

  • 自定义镜像:开发人员可以在基础镜像的基础上,安装依赖软件或添加应用程序代码,生成自己的自定义镜像。这个过程通常通过 Dockerfile 来完成。

  • Dockerfile:Dockerfile 是一个文本文件,定义了构建 Docker 镜像的步骤。它包含了一系列指令,如指定基础镜像、安装依赖包、复制文件、设置环境变量等。Docker 引擎通过读取 Dockerfile 来自动构建镜像。

  • 可移植性:由于 Docker 镜像包含了应用运行所需的所有内容,任何 Docker 宿主机都可以运行该镜像,无论操作系统或底层硬件如何。这大大提高了应用程序在不同环境中的一致性和可移植性。

Docker 镜像 vs 容器

Docker 镜像 是应用的静态构建物,包含应用和其依赖项的所有内容。镜像是只读的,不能被修改。
Docker 容器 是镜像的一个运行实例,包含镜像的内容以及可写的层。每个容器在运行时都可以对自己的可写层进行修改,而不会影响原始镜像。
使用场景
开发与测试环境一致性:开发人员可以通过 Docker 镜像确保开发、测试和生产环境完全一致,避免“在我的电脑上运行没问题”的问题。
持续集成与持续部署 (CI/CD):镜像可以被自动构建并推送到仓库,然后在部署时拉取并运行,极大地提高了软件交付的速度和质量。
应用打包与分发:通过 Docker 镜像,开发人员可以将应用程序及其所有依赖项打包在一起,便于在不同的机器或云平台上快速分发和运行。

示例 EC2 上部署一个 Python 应用程序

要在 AWS EC2 上部署一个使用 AWS ECR 存储的简单 Python 应用程序,可以按照以下步骤进行。这个流程会演示如何将 Python 应用容器化,推送到 ECR 并使用 EC2 进行部署。

ECR 典型工作流

构建镜像:开发者本地使用 Docker 构建容器镜像。
推送镜像:使用 AWS CLI 将镜像推送到 ECR 仓库。
部署镜像:通过 ECS 或 EKS 将容器镜像部署到集群中,运行容器化应用。
ECR 提供了与 AWS 服务的无缝集成、灵活的安全管理以及全球可用性,非常适合大规模、分布式的容器化应用部署。

部署步骤

准备 Python 应用程序

首先,创建一个简单的 Python 应用程序。比如一个 Flask 应用。
文件结构如下

myapp/
│
├── app.py
├── requirements.txt
└── Dockerfile

app.py (Flask 应用)

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

requirements.txt (Python 依赖)

Flask==2.0.1

编写 Dockerfile

创建一个 Dockerfile,用于定义如何构建 Python 应用的 Docker 镜像。

Dockerfile

# 使用官方的 Python 3 基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制依赖文件
COPY requirements.txt .# 安装依赖
RUN pip install -r requirements.txt# 复制应用代码
COPY . .# 暴露端口
EXPOSE 5000# 启动应用
CMD ["python", "app.py"]

创建 ECR 仓库

  1. 登录 AWS 管理控制台,进入 ECR (Elastic Container Registry) 页面。
  2. 创建仓库:
    点击 Create repository 按钮。
    给仓库命名,比如 my-python-app,保持其他设置默认。
  3. 记下仓库 URL,例如:123456789012.dkr.ecr.us-west-2.amazonaws.com/my-python-app。

构建和推送 Docker 镜像到 ECR

  1. 登录 AWS CLI: 确保你在本地安装并配置了 AWS CLI,执行以下命令登录到 ECR。
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com

用你的 AWS 账户 ID 和区域替换 <aws_account_id> 和 。
2. 构建 Docker 镜像: 在应用根目录下运行以下命令构建 Docker 镜像。

docker build -t my-python-app .
  1. 标记 Docker 镜像: 将 Docker 镜像标记为 ECR 仓库的镜像。
docker tag my-python-app:latest <aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-python-app:latest
  1. 推送镜像到 ECR:
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-python-app:latest

现在你的 Python 应用镜像已经推送到 ECR。

部署到 EC2 实例

步骤:

  1. 启动 EC2 实例:
  • 在 AWS 控制台中,进入 EC2 页面,点击 Launch Instance。
  • 选择适合的 Amazon Linux 2 或 Ubuntu AMI 镜像,并选择实例类型(如 t2.micro)。
  • 在 Configure Security Group 中,确保开启 HTTP (80) 或你需要的端口(如 5000),以允许流量访问应用。
  • 启动实例并记下公有 IP 地址。
  1. 连接到 EC2 实例: 使用 SSH 连接到你的 EC2 实例。
ssh -i "your-key.pem" ec2-user@<ec2-public-ip>
  1. 安装 Docker: 在 EC2 实例上安装 Docker。
sudo yum update -y
sudo yum install docker -y
sudo service docker start
sudo usermod -a -G docker ec2-user

注销并重新登录 EC2 实例,以便让 ec2-user 加入 Docker 组。

  1. 登录 ECR: 登录到你的 ECR 仓库。
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
  1. 拉取 Docker 镜像: 从 ECR 仓库拉取你之前推送的 Python 应用镜像。
docker pull <aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-python-app:latest
  1. 运行容器: 使用以下命令运行 Docker 容器:
docker run -d -p 5000:5000 <aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-python-app:latest
  1. 访问应用: 在浏览器中输入 http://:5000,你应该能看到页面显示 Hello, World!。

设置 EC2 实例自动启动容器

为确保容器在 EC2 实例重新启动后自动启动,你可以创建一个 systemd 服务来管理 Docker 容器。

创建 systemd 服务文件:

sudo vim /etc/systemd/system/myapp.service

在文件中添加以下内容:

[Unit]
Description=My Python App
Requires=docker.service
After=docker.service[Service]
Restart=always
ExecStart=/usr/bin/docker run -d -p 5000:5000 <aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-python-app:latest
ExecStop=/usr/bin/docker stop $(/usr/bin/docker ps -q --filter ancestor=<aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-python-app:latest)[Install]
WantedBy=multi-user.target

启动并启用服务:

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com